From 3891a0be2c5f19d93e70f34f3ba7b09d75c87250 Mon Sep 17 00:00:00 2001 From: majakomel Date: Fri, 11 Oct 2024 10:47:20 +0200 Subject: [PATCH 1/5] Add translations --- components/LocaleSwitcher.tsx | 18 ++ components/NavBar.tsx | 4 +- pages/404.tsx | 17 +- public/static/lang/ar.json | 143 ++++++++++++++ public/static/lang/de.json | 160 +++++++++++++-- public/static/lang/en.json | 2 +- public/static/lang/es.json | 4 +- public/static/lang/fa.json | 4 +- public/static/lang/id.json | 143 ++++++++++++++ public/static/lang/km.json | 143 ++++++++++++++ public/static/lang/pt-br.json | 6 +- public/static/lang/ru.json | 160 +++++++++++++-- public/static/lang/th.json | 2 +- public/static/lang/tr.json | 160 +++++++++++++-- public/static/lang/translations.js | 306 ----------------------------- public/static/lang/vi.json | 27 +++ public/static/lang/zh-TW.json | 4 +- public/static/lang/zh-cn.json | 162 ++++++++++++--- scripts/build-translations.js | 24 +-- 19 files changed, 1064 insertions(+), 425 deletions(-) create mode 100644 public/static/lang/ar.json create mode 100644 public/static/lang/id.json create mode 100644 public/static/lang/km.json delete mode 100644 public/static/lang/translations.js create mode 100644 public/static/lang/vi.json diff --git a/components/LocaleSwitcher.tsx b/components/LocaleSwitcher.tsx index 4834d01..9178488 100644 --- a/components/LocaleSwitcher.tsx +++ b/components/LocaleSwitcher.tsx @@ -3,6 +3,24 @@ import { getDirection } from 'pages/_app' import type { ReactNode } from 'react' import { useIntl } from 'react-intl' +import '@formatjs/intl-displaynames/polyfill' + +import '@formatjs/intl-displaynames/locale-data/ar' +import '@formatjs/intl-displaynames/locale-data/de' +import '@formatjs/intl-displaynames/locale-data/en' +import '@formatjs/intl-displaynames/locale-data/es' +import '@formatjs/intl-displaynames/locale-data/fa' +import '@formatjs/intl-displaynames/locale-data/fr' +import '@formatjs/intl-displaynames/locale-data/my' +import '@formatjs/intl-displaynames/locale-data/pt' +import '@formatjs/intl-displaynames/locale-data/ru' +import '@formatjs/intl-displaynames/locale-data/sw' +import '@formatjs/intl-displaynames/locale-data/th' +import '@formatjs/intl-displaynames/locale-data/tr' +import '@formatjs/intl-displaynames/locale-data/vi' +import '@formatjs/intl-displaynames/locale-data/zh-Hans' +import '@formatjs/intl-displaynames/locale-data/zh-Hant' + export const getLocalisedLanguageName = ( regionCode: string, locale: string, diff --git a/components/NavBar.tsx b/components/NavBar.tsx index 95495e3..1365ac5 100644 --- a/components/NavBar.tsx +++ b/components/NavBar.tsx @@ -1,4 +1,4 @@ -// import LocaleSwitcher from "components/LocaleSwitcher" +import LocaleSwitcher from 'components/LocaleSwitcher' import useUser from 'hooks/useUser' import Link from 'next/link' import { useRouter } from 'next/router' @@ -97,7 +97,7 @@ export const NavBar = () => { )} - {/* */} + diff --git a/pages/404.tsx b/pages/404.tsx index d2269bc..0c5562b 100644 --- a/pages/404.tsx +++ b/pages/404.tsx @@ -1,9 +1,9 @@ -import Head from "next/head" -import { useRouter } from "next/router" -import { FormattedMessage, useIntl } from "react-intl" +import Head from 'next/head' +import { useRouter } from 'next/router' +import { FormattedMessage, useIntl } from 'react-intl' -import OONIRunHero from "components/OONIRunHero" -import OONI404 from "public/static/images/OONI_404.svg" +import OONIRunHero from 'components/OONIRunHero' +import OONI404 from 'public/static/images/OONI_404.svg' const Custom404 = () => { const router = useRouter() @@ -11,7 +11,7 @@ const Custom404 = () => { return ( <> - {intl.formatMessage({ id: "Error.404.PageNotFound" })} + {intl.formatMessage({ id: 'Error.404.PageNotFound' })}
@@ -21,10 +21,7 @@ const Custom404 = () => {
- +
diff --git a/public/static/lang/ar.json b/public/static/lang/ar.json new file mode 100644 index 0000000..8d7385b --- /dev/null +++ b/public/static/lang/ar.json @@ -0,0 +1,143 @@ +{ + "Hero.SubTitle": "تواصل مع معارفك لاكتشاف المواقع المحجوبة", + "Button.Generate": "إنشاء رابط", + "Button.Update": "تحديث", + "Share.Twitter.Button": "تغريد", + "Share.Twitter.Tweet": "تشغيل OONI Probe لمعرفة المواقع المحجوبة!", + "Home.Heading.TestName": "اسم الاختبار", + "Modal.Button.Link": "فتح الرابط في OONI Probe", + "Modal.Heading.ShareThisURL": "مشاركة هذا الرابط", + "Nettest.Heading.HaveMobileApp": "هل تم تثبيت OONI Probe Mobile؟", + "Nettest.Text.HaveMobileApp": "اضغط على الزرر في الأسفل لتثبيت رابط OONI Run في OONI Probe.", + "Nettest.Button.Run": "تشغيل في التطبيق", + "Nettest.Heading.InstallApp": "ليس لديك تطبيق OONI Probe؟", + "Nettest.Text.InstallApp": "قم بتثبيت OONI Probe Mobile من متجر التطبيقات واضغط على رابط OONI Run مرة أخرى.", + "Nettest.Button.Install": "تثبيت", + "Nettest.DownloadAndroid": "تثبيت OONI Probe على الأندرويد", + "Nettest.DownloadIOS": "تثبيت OONI Probe على iOS", + "Nettest.DownloadFdroid": "تثبيت OONI Probe من F-Droid", + "Notice.Paste": "ملحوظة: بإمكانك نسخ ولصق الروابط في أحد الصناديق بالأسفل إذا كنت تريد إضافة قائمة كبيرة من الروابط.", + "WhatCanYouDoText.WebCensorship": "يمكنك إضافة رابط بالأسفل لمشاركته مع معارفك لمعرفة المواقع المحجوبة.\n\nقم بإضافة المواقع بالأسفل التي تريد اختبار حجبها لإنشاء الرابط الخاص بك. قم بإضافة عنوان وتوضيح تخصيصي للرابط الخاص بك لتشجيع معارفك على عمل الاختبار. عندما تنتهي من ذلك، اضغط على زرر \"إنشاء رابط\" وشارك الرابط الذى تم انشاؤه مع مستخدمي [OONI Probe mobile تطبيق](https://ooni.org/install/mobile) لكي يختبروا المواقع التي اخترتها!", + "Error.Empty": "لا يمكن أن يكون فارغا", + "Error.UrlFormat": "قم بإضافة عنوان صالح من فضلك مثل \"https://ooni.org/post/\"", + "Home.About": "OONI Run يدعم الجهود الجماعية التي تستهدف معرفة المواقع المحجوبة. قم بإنشاء رابط OONI Run لاختبار المواقع التي تختارها!", + "Home.Box1.Title": "الاستجابة السريعة", + "Home.Box1.Description": "هل بلدك فيها انتخابات قريبة؟ حالات الحجب والرقابة [تظهر](https://ooni.org/reports/) عادة حول العالم أثناء الانتخابات، المظاهرات، وغيرها من الأحداث السياسية. إذا شككت أن مواقع بعينها تصبح محجوبة أثناء أحداث سياسية معينة فاستخدم هذه المنصة لانشاء رابط OONI Run لاختبار هذه المواقع. قم بمشاركة هذا الرابط مع مستخدمي [OONI Probe](https://ooni.org/install/mobile) لجمع الأدلة على الحجب!", + "Home.Box2.Title": "أبحاث الرقابة", + "Home.Box2.Description": "هل أنت مهتم بإجراء الأبحاث على حجب مواقع معينة؟ استخدم هذه المنصة لإنشاء رابط OONI Run لاختبار المواقع التي تهتم بها. قم بمشاركة هذا الرابط مع مستخدمي [OONI Probe](https://ooni.org/install/mobile) في البلاد المختلفة! تعلم [كيف استخدم أعضاء المجتمع المحلي OONI Run كجزء من مجهوداتهم البحثية](https://ooni.org/support/ooni-censorship-measurement-campaigns).", + "Home.Box3.Title": "مراقبة موقعك", + "Home.Box3.Description": "هل أنت مهتم بمراقبة حجب موقعك حول العالم؟ إذا تم اختبار موقعك عن طريق مستخدمي [OONI Probe](https://ooni.org/install/) فإنك سوف تحصل على [بيانات فورية مفتوحة المصدر](https://ooni.org/data/) والتي تظهر كيف يتم الحجب تقنيا وفي أي شبكة يتم الحجب. استخدم هذه المنصة لإنشاء رابط OONI Run لإجراء الاختبارات على موقعك!", + "Home.Button.CreateRunLink": "إنشاء رابط OONI Run", + "Home.Button.Login": "قم بتسجيل الدخول لإنشاء رابط OONI Run", + "Nettest.DeprecationWarning": "هذا الإصدار من روابط OONI Run لن يكون صالحا في الأول من يناير 2025.\nللتحويل إلى الإصدار الأخير (OONI Run v2)، قم بتسجيل الدخول وأنشأ روابط جديدة.", + "List.Title": "روابط OONI Run الخاصة بي", + "List.Empty": "ليس لديك أي روابط OONI Run", + "List.Button.Create": "إنشاء أول رابط خاص بك", + "LinkView.Error.DoesNotExist": "رابط OONI Run غير موجود", + "LinkView.Error.ServerError": "لقد حدث خطأ.", + "TestListForm.Validation.Required": "حقل ضروري", + "TestListForm.Validation.Min2": "يجب أن يكون حرفين على الأقل", + "TestListForm.Validation.Max50": "يفضل أن يكون أفل من 50 حرفا.", + "TestListForm.Validation.FutureDate": "يجب أن يكون تاريخ الانتهاء في المستقبل.", + "TestListForm.Validation.Min1Url": "يلزم وجود رابط واحد على الأقل.", + "TestListForm.MigrationModalLink": "هل لديك روابط OONI Run قديمة من الإصدار الأول؟ اضغط هنا لإضافة المواقع من هذه الروابط.", + "TestListForm.Label.Color": "اللون", + "TestListForm.Label.TestListName": "عنوان رابط OONI Run الخاص بك", + "TestListForm.Label.ShortDescription": "وصف مختصر", + "TestListForm.Label.Description": "الوصف", + "TestListForm.Label.Email": "ايميل منشأ الرابط", + "TestListForm.Label.ExpirationDate": "تأريخ الأنتهاء", + "TestListForm.Label.Icon": "أيقونة", + "TestListForm.OptionsFields.Key": "مفتاح", + "TestListForm.OptionsFields.Value": "‮القيمة", + "TestListForm.OptionsFields.AddOption": "أضف خيار", + "TestListForm.NettestFields.Urls": "روابط", + "TestListForm.Intl.Language": "لغة", + "TestListForm.Intl.Translation": "الترجمة", + "TestListForm.Intl.AddTranslation": "إضافة ترجمة", + "TestListForm.Inputs.AddInput": "إضافة رابط", + "TestListForm.Icon.Select": "اختيار أيقونة", + "TestListForm.Icon.Replace": "استبدال الأيقونة", + "TestListForm.AdminNettests.Tests": "الاختبارات", + "TestListForm.AdminNettests.AddTest": "إضافة اختبار", + "TestListForm.AdminNettests.DeleteTest": "حذف الاختبار", + "TestListForm.AdminNettests.EnableManualRun": "تفعيل التشغيل اليدوي", + "TestListForm.AdminNettests.EnableBackgroundRun": "تفعيل التشغيل في الخلفية", + "TestListForm.AdminNettests.BackendOptions": "اختيارات الطرف الخلفي", + "TestListForm.AdminNettests.Options": "‮خيارات", + "MigrationModal.RunLink": "رابط OONI Run", + "MigrationModal.AddUrls": "إضافة عناوين", + "General.Cancel": "إلغاء ", + "General.Edit": "تعديل", + "RevisionView.TopNotice": "هذه مراجعة بتاريخ {date}. العودة إلى الرابط الحالي.", + "RevisionView.LinkInfo": "معلومات الرابط", + "DescriptorDetails.CreatedByOn": "تم الإنشاء بواسطة {author} في {date}.", + "DescriptorDetails.CreatedOn": "تم الإنشاء في {date}.", + "DescriptorDetails.LastUpdated": "آخر تحديث {date}.", + "DescriptorDetails.ExpirationDate": "تاريخ الإنتهاء {date}.", + "DescriptorDetails.ExpirationNotice": "الرابط الخاص بك ينتهي في {date}", + "DescriptorDetails.UpdateButton": "تحديث الآن", + "DescriptorView.LinkContent": "محتوى الرابط", + "Revisions.Title": "المراجعات السابقة", + "ArchivedTag.Expired": "منتهي الصلاحية", + "DescriptorCard.CreatedBy": "تم الإنشاء بواسطة {author}", + "DescriptorCard.Updated": "تم التحديث {date}", + "DescriptorCard.Expired": "انتهى في {date}", + "DescriptorCard.Expiring": "يتم الانتهاء {date}", + "Navbar.Login": "تسجيل الدخول", + "Navbar.Logout": "تسجيل الخروج", + "Navbar.List": "روابط OONI Run الخاصة بي", + "Navbar.Create": "أنشء رابط تشغيل OONI", + "Login.Title": "من فضلك سجّل دخولك كي تتكمن من المتابعة", + "Login.EnterEmail": "أضف إيميلك واضغط على الرابط المرسل إلى إيميلك لتسجيل الدخول.\n\nعندما تقوم بإنشاء رابط OONI Run فإننا سنسجل الايميل الخاص بك. هذا يعطي الثقة في رابط OONI Run الخاص بك لمستخدمي OONI Probe الذين يستلمون الرابط.", + "Login.Submitted": "لقد تم استلام طلبك بتسجيل الدخول. رجاءً تحقق من وصول الرابط لبريدك الإلكتروني لتفعيله وتسجيل الدخول إلى حسابك.", + "Login.LoggingIn": "يجري تسجيل الدخول...", + "Login.Failure": "حاول تسجيل الدخول مجدداً", + "Login.Button": "ارسال الرابط إلىّ", + "Login.Success": "لقد تم تسجيل دخولك بنجاح. تجري إعادة التوجيه...", + "Footer.Text.Slogan": "يقيس المجتمع العالمي الرقابة على الانترنت في جميع أنحاء العالم.", + "Footer.Heading.About": "عن", + "Footer.Heading.OONIProbe": "مسبار OONI", + "Footer.Heading.Updates": "التحديثات ", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "سياسة البيانات", + "Footer.Link.DataLicense": "ترخيص البيانات", + "Footer.Link.Contact": "اتصل بنا", + "Footer.Link.Probe": "تثبيت", + "Footer.Link.Tests": "الاختبارات", + "Footer.Link.Code": "الكود المصدري", + "Footer.Link.API": "واجهة برمجة التطبيقات", + "Footer.Link.Blog": "المدونة", + "Footer.Link.Twitter": "تويتر", + "Footer.Link.MailingList": "قائمة بريدية", + "Footer.Link.Slack": "تطبيق سلاك (Slack)", + "Footer.Text.Copyright": "‫© {currentYear} المرصد المفتوح لتداخل الشبكات (OONI)", + "Footer.Text.CCommons": "المحتوى المتاح بموجب ترخيص المشاع الإبداعي.", + "Tests.WebConnectivity.Name": "اختبار الاتصال بالشبكة", + "Tests.Telegram.Name": "اختبار Telegram ", + "Tests.Facebook.Name": "اختبار Facebook Messenger", + "Tests.WhatsApp.Name": "اختبار WhatsApp", + "Tests.Signal.Name": "اختبار Signal ", + "Tests.HTTPInvalidReqLine.Name": "اختبار عدم صلاحية طلب HTTP", + "Tests.HTTPHeaderManipulation.Name": "اختبار التلاعب بخانة رأس صفحة HTTP", + "Tests.NDT.Name": "اختبار السرعة NDT", + "Tests.Dash.Name": "اختبار البث الحي بالفيديو بصيغة DASH", + "Tests.TorVanilla.Name": "اختبار تطبيق تور (Vanilla)", + "Tests.BridgeReachability.Name": "اختبار قابلية الوصول لجسر تور", + "Tests.TCPConnect.Name": "اختبار الاتصال بـ TCP", + "Tests.DNSConsistency.Name": "اختبار اتساق‫ خادم أسماء النطاقات (DNS)‬", + "Tests.HTTPRequests.Name": "اختبار طلبات HTTP", + "Tests.Psiphon.Name": "اختبار Psiphon", + "Tests.Tor.Name": "اختبار تور", + "Tests.RiseupVPN.Name": "اختبار RiseupVPN ", + "Tests.TorSnowflake.Name": "اختبار Snowflake لِتور", + "Tests.DNSCheck.Name": "التحقق من ‫خادم أسماء النطاقات (DNS)‬", + "Tests.StunReachability.Name": "قابلية وصول بروتوكول خدمات تخطي جلسة ترجمة عنوان الشبكة (STUN)", + "Tests.URLGetter.Name": "الأداة URL Getter", + "Tests.ProbeWeb.Name": "مسبار OONI", + "DateRange.OneWeek": "أسبوع واحد", + "DateRange.OneMonth": "شهر واحد", + "DateRange.SixMonths": "ستة شهور", + "DateRange.Apply": "التطبيق", + "DateRange.Cancel": "إلغاء " +} \ No newline at end of file diff --git a/public/static/lang/de.json b/public/static/lang/de.json index f8d71cf..6c950d9 100644 --- a/public/static/lang/de.json +++ b/public/static/lang/de.json @@ -1,25 +1,143 @@ { - "Hero.SubTitle": "Koordinierung der Zensurtests für Websites", - "Title.URLs": "URLs", - "Button.AddUrl": "URL hinzufügen", - "Button.Generate": "Erzeuge", - "Share.Twitter.Tweet": "Führe OONI Probe aus, um auf Zensur zu testen!", + "Hero.SubTitle": "Koordiniere dich mit deiner Community, um Website-Blockaden zu erkennen", + "Button.Generate": "Erstelle Link", + "Button.Update": "Aktualisieren", + "Share.Twitter.Button": "Tweet", + "Share.Twitter.Tweet": "Führe OONI Probe aus, um Websites auf Zensur zu testen!", "Home.Heading.TestName": "Name testen", - "Sidebar.WebConnectivity.Title": "Internetzensur", - "Sidebar.Performance.Title": "Geschwindigkeit & Leistung", - "Sidebar.Middleboxes.Title": "Middleboxen", - "Modal.Heading.LinkReady": "Dein Link ist bereit!", - "Modal.Heading.ShareIt": "Teile das auf Social Media", - "Modal.Button.Link": "Link", - "Modal.Heading.ShareThisURL": "Teile diesen Link mit Nutzern der OONI Probe Mobile App", - "Modal.Heading.EmbedThisCode": "Oder bette diesen Code auf deiner Website ein", - "Modal.Button.Done": "Erledigt", - "Nettest.Heading.HaveMobileApp": "Du hast bereits die OONI Probe Mobile App", - "Nettest.Text.HaveMobileApp": "Tippe auf Ausführen und öffne diesen Link mit deiner OONI Probe Mobile App, um den Test zu starten.", - "Nettest.Button.Run": "Ausführen", - "Nettest.Heading.InstallApp": "Installiere die OONI Probe Mobile App", - "Nettest.Text.InstallApp": "Derzeit funktionieren die OONI Run Links nur mit der OONI Probe Mobile App.", + "Modal.Button.Link": "Öffne Link in OONI Probe", + "Modal.Heading.ShareThisURL": "Diesen Link teilen", + "Nettest.Heading.HaveMobileApp": "Hast du OONI Probe Mobile installiert?", + "Nettest.Text.HaveMobileApp": "Klicke auf die Schaltfläche unten, um den OONI Run Link in OONI Probe zu installieren.", + "Nettest.Button.Run": "In der App ausführen", + "Nettest.Heading.InstallApp": "Hast du die OONI Probe App noch nicht?", + "Nettest.Text.InstallApp": "Installiere OONI Probe Mobile aus dem App Store und klicke erneut auf den Link OONI Run.", "Nettest.Button.Install": "Installiere", + "Nettest.DownloadAndroid": "Installiere OONI Probe auf Android", + "Nettest.DownloadIOS": "Installiere OONI Probe auf iOS", + "Nettest.DownloadFdroid": "Installiere OONI Probe auf F-Droid", "Notice.Paste": "Hinweis: Wenn du eine lange Liste von URLs hast, die du hinzufügen möchtest, kannst du sie kopieren und in eines der Felder unten einfügen.", - "WhatCanYouDoText.WebCensorship": "Füge unten Websites hinzu, die du auf Zensur testen möchtest. Klicke auf \"Erzeugen\", um einen Link zu erstellen, der auf diesen Websites basiert. Teile diesen Link mit den Nutzern der OONI Probe Mobile App, damit diese die Websites ihrer Wahl testen können!" -} + "WhatCanYouDoText.WebCensorship": "Im Folgenden kannst du einen Link erstellen, den du mit deiner Community teilen kannst, um Websites auf Zensur zu testen.\n\nUm deinen Link zu erstellen, füge unten URLs hinzu, die du auf Zensur testen möchtest. Um deine Community zum Testen zu ermutigen, kannst du deinen Link anpassen, indem du einen Titel und eine Beschreibung hinzufügst. Wenn du fertig bist, klicke auf die Schaltfläche „Link erstellen“ und teile den generierten Link mit den Nutzern der [OONI Probe mobile app](https://ooni.org/install/mobile), damit diese die Webseiten deiner Wahl testen können!", + "Error.Empty": "Kann nicht leer sein", + "Error.UrlFormat": "Bitte gib ein gültiges URL-Format an, z. B. \"https://ooni.org/post/\"", + "Home.About": "OONI Run unterstützt die Bemühungen der Gemeinschaft, Website-Blockaden zu erkennen. Erstelle einen OONI Run-Link, um die Websites deiner Wahl zu testen!", + "Home.Box1.Title": "Schnelle Antwort", + "Home.Box1.Description": "Finden in deinem Land demnächst Wahlen statt? Während Wahlen, Protesten und anderen politischen Ereignissen kommt es weltweit häufig zu Zensurmaßnahmen (https://ooni.org/reports/). Wenn du den Verdacht hast, dass bestimmte Webseiten während politischer Ereignisse blockiert sein könnten, dann verwende diese Plattform, um einen OONI Run Link zu erstellen und zu testen. Teile diesen Link mit [OONI Probe](https://ooni.org/install/mobile) Benutzern, um Beweise für Blockierungen zu sammeln!", + "Home.Box2.Title": "Zensurforschung", + "Home.Box2.Description": "Bist du daran interessiert, die Sperrung bestimmter Websites zu untersuchen? Benutze diese Plattform, um einen OONI Run Link für das Testen der Webseiten, die dir wichtig sind, zu erstellen. Teile diesen Link mit [OONI Probe](https://ooni.org/install/mobile) Benutzern in verschiedenen Ländern! Erfahre [wie Mitglieder der Gemeinschaft OONI Run als Teil ihrer Forschungsbemühungen genutzt haben](https://ooni.org/support/ooni-censorship-measurement-campaigns).", + "Home.Box3.Title": "Überwache deine Website", + "Home.Box3.Description": "Bist du daran interessiert, die Sperrung deiner Website weltweit zu überwachen? Indem du deine Website von [OONI Probe](https://ooni.org/install/) Nutzern testen lässt, erhältst du [offene Echtzeitdaten](https://ooni.org/data/), die zeigen, wie die Sperrung technisch umgesetzt wird und in welchen Netzwerken sie blockiert ist. Nutze diese Plattform, um einen OONI Run Link für den Test deiner Website zu generieren!", + "Home.Button.CreateRunLink": "OONI Run Link erstellen", + "Home.Button.Login": "Melde dich an, um einen OONI Run Link zu erstellen", + "Nettest.DeprecationWarning": "Diese Version von OONI Run Links wird am 1. Januar 2025 veraltet sein.\nUm auf die neueste Version (OONI Run v2) zu migrieren, melde dich an und erzeuge neue Links.", + "List.Title": "Meine OONI Run Links", + "List.Empty": "Du hast noch keine OONI Run Links", + "List.Button.Create": "Erstelle deinen ersten OONI Run Link", + "LinkView.Error.DoesNotExist": "OONI Run Link ist nicht vorhanden", + "LinkView.Error.ServerError": "Etwas ist schief gegangen.", + "TestListForm.Validation.Required": "Pflichtfeld", + "TestListForm.Validation.Min2": "Muss mindestens 2 Zeichen lang sein.", + "TestListForm.Validation.Max50": "Sollte kürzer als 50 Zeichen sein.", + "TestListForm.Validation.FutureDate": "Das Verfallsdatum sollte in der Zukunft liegen.", + "TestListForm.Validation.Min1Url": "Mindestens 1 URL ist erforderlich.", + "TestListForm.MigrationModalLink": "Hast du alte OONI Run v1 Links? Klicke hier, um URLs von solchen Links hinzuzufügen.", + "TestListForm.Label.Color": "Farbe", + "TestListForm.Label.TestListName": "Titel deines OONI Run Links", + "TestListForm.Label.ShortDescription": "Kurzbeschreibung", + "TestListForm.Label.Description": "Beschreibung", + "TestListForm.Label.Email": "E-Mail des Autors", + "TestListForm.Label.ExpirationDate": "Verfallsdatum", + "TestListForm.Label.Icon": "Symbol", + "TestListForm.OptionsFields.Key": "Schlüssel", + "TestListForm.OptionsFields.Value": "Wert", + "TestListForm.OptionsFields.AddOption": "Option hinzufügen", + "TestListForm.NettestFields.Urls": "URLs", + "TestListForm.Intl.Language": "Sprache", + "TestListForm.Intl.Translation": "Übersetzung", + "TestListForm.Intl.AddTranslation": "Übersetzung hinzufügen", + "TestListForm.Inputs.AddInput": "URL hinzufügen", + "TestListForm.Icon.Select": "Symbol auswählen", + "TestListForm.Icon.Replace": "Symbol ersetzen", + "TestListForm.AdminNettests.Tests": "Tests", + "TestListForm.AdminNettests.AddTest": "Test hinzufügen", + "TestListForm.AdminNettests.DeleteTest": "Test löschen", + "TestListForm.AdminNettests.EnableManualRun": "Manuelle Ausführung aktivieren", + "TestListForm.AdminNettests.EnableBackgroundRun": "Ausführung im Hintergrund aktivieren", + "TestListForm.AdminNettests.BackendOptions": "Backend Optionen", + "TestListForm.AdminNettests.Options": "Optionen", + "MigrationModal.RunLink": "OONI Run Link", + "MigrationModal.AddUrls": "URLs hinzufügen", + "General.Cancel": "Abbrechen", + "General.Edit": "Bearbeiten", + "RevisionView.TopNotice": "Das ist eine Version vom {date}. Zurück zum aktuellen Link.", + "RevisionView.LinkInfo": "Link Informationen", + "DescriptorDetails.CreatedByOn": "Erstellt von {author} am {date}.", + "DescriptorDetails.CreatedOn": "Erzeugt am {date}.", + "DescriptorDetails.LastUpdated": "Zuletzt aktualisiert {date}.", + "DescriptorDetails.ExpirationDate": "Ablaufdatum {date}.", + "DescriptorDetails.ExpirationNotice": "Dein Link läuft ab am {date}", + "DescriptorDetails.UpdateButton": "Jetzt aktualisieren", + "DescriptorView.LinkContent": "Link Inhalt", + "Revisions.Title": "Frühere Überarbeitungen", + "ArchivedTag.Expired": "ABGELAUFEN", + "DescriptorCard.CreatedBy": "Erstellt von {author}", + "DescriptorCard.Updated": "Aktualisiert {date}", + "DescriptorCard.Expired": "Abgelaufen {date}", + "DescriptorCard.Expiring": "Läuft ab {date}", + "Navbar.Login": "Anmelden", + "Navbar.Logout": "Abmelden", + "Navbar.List": "Meine OONI Run Links", + "Navbar.Create": "OONI Run Link erstellen", + "Login.Title": "Bitte melde dich an, um fortzufahren", + "Login.EnterEmail": "Füge deine E-Mail-Adresse hinzu und klicke auf den Link in deiner E-Mail, um dich anzumelden.\n\nWenn du einen OONI Run Link erstellst, speichern wir deine Email-Adresse. Dadurch können OONI Probe-Benutzer, die deinen OONI Run Link erhalten, diesem vertrauen.", + "Login.Submitted": "Deine Login-Anfrage wurde abgeschickt. Bitte prüfe dein E-Mail auf einen Link, um dein Konto zu aktivieren und dich anzumelden.", + "Login.LoggingIn": "Anmeldung...", + "Login.Failure": "Neuer Anmeldungsversuch", + "Login.Button": "Sende mir den Link", + "Login.Success": "Erfolgreich eingeloggt. Weiterleitung…", + "Footer.Text.Slogan": "Globale Community zur Messung der Internetzensur auf der ganzen Welt.", + "Footer.Heading.About": "Über", + "Footer.Heading.OONIProbe": "OONI Probe", + "Footer.Heading.Updates": "Aktualisierungen", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "Daten-Richtlinie", + "Footer.Link.DataLicense": "Daten-Lizenz", + "Footer.Link.Contact": "Kontakt", + "Footer.Link.Probe": "Installieren", + "Footer.Link.Tests": "Tests", + "Footer.Link.Code": "Quellcode", + "Footer.Link.API": "API", + "Footer.Link.Blog": "Blog", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "Mailingliste", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "Der Inhalt ist unter einer Creative-Commons-Lizenz verfügbar.", + "Tests.WebConnectivity.Name": "Web Connectivity Test", + "Tests.Telegram.Name": "Telegram-Test", + "Tests.Facebook.Name": "Facebook Messenger Test", + "Tests.WhatsApp.Name": "WhatsApp-Test", + "Tests.Signal.Name": "Signal-Test", + "Tests.HTTPInvalidReqLine.Name": "HTTP Invalid Request Line Test", + "Tests.HTTPHeaderManipulation.Name": "HTTP Header Field Manipulation Test", + "Tests.NDT.Name": "NDT Geschwindigkeitstest", + "Tests.Dash.Name": "DASH Video Streaming Test", + "Tests.TorVanilla.Name": "Tor (Vanilla) Test", + "Tests.BridgeReachability.Name": "Tor-Brücke Erreichbarkeits-Test", + "Tests.TCPConnect.Name": "TCP Verbindungs-Test", + "Tests.DNSConsistency.Name": "DNS Konsistenz-Test", + "Tests.HTTPRequests.Name": "Test HTTP-Anforderungen", + "Tests.Psiphon.Name": "Psiphon Test", + "Tests.Tor.Name": "Tor Test", + "Tests.RiseupVPN.Name": "RiseupVPN Test", + "Tests.TorSnowflake.Name": "Tor Snowflake-Test", + "Tests.DNSCheck.Name": "DNS Überprüfung", + "Tests.StunReachability.Name": "STUN Erreichbarkeit", + "Tests.URLGetter.Name": "URL-Tester", + "Tests.ProbeWeb.Name": "OONI Probe Web", + "DateRange.OneWeek": "Eine Woche", + "DateRange.OneMonth": "Ein Monat", + "DateRange.SixMonths": "Sechs Monate", + "DateRange.Apply": "Anwenden", + "DateRange.Cancel": "Abbrechen" +} \ No newline at end of file diff --git a/public/static/lang/en.json b/public/static/lang/en.json index f3c070f..b7d216a 100644 --- a/public/static/lang/en.json +++ b/public/static/lang/en.json @@ -143,4 +143,4 @@ "Error.404.PageNotFound": "Page Not Found", "Error.404.Heading": "The requested page does not exist", "Error.404.Message": "We could not find the content you were looking for." -} +} \ No newline at end of file diff --git a/public/static/lang/es.json b/public/static/lang/es.json index 4ffc05b..422c3b1 100644 --- a/public/static/lang/es.json +++ b/public/static/lang/es.json @@ -21,5 +21,5 @@ "Nettest.Text.InstallApp": "Actualmente, los enlaces OONI Run solo funcionan con la aplicación móvil OONI Probe.", "Nettest.Button.Install": "Instalar", "Notice.Paste": "Nota: si tienes una lista larga de URLs para agregar, puedes copiarlas y pegarlas en uno de los cuadros a continuación.", - "WhatCanYouDoText.WebCensorship": "Agrega sitios web a continuación que te gustaría probar para la censura. Haz clic en \"Generar\" para crear un enlace basado en esos sitios web. ¡Comparte ese enlace con los usuarios de la aplicación móvil OONI Probe para que puedan probar los sitios web de tu elección!" -} + "WhatCanYouDoText.WebCensorship": "Agrega sitios web a continuación que te gustaría probar para la censura. Haz clic en \\\"Generar\\\" para crear un enlace basado en esos sitios web. ¡Comparte ese enlace con los usuarios de la aplicación móvil OONI Probe para que puedan probar los sitios web de tu elección!" +} \ No newline at end of file diff --git a/public/static/lang/fa.json b/public/static/lang/fa.json index 291ec16..68fabb7 100644 --- a/public/static/lang/fa.json +++ b/public/static/lang/fa.json @@ -21,5 +21,5 @@ "Nettest.Text.InstallApp": "در حال حاضر، پیوندهای OONI Run فقط با برنامه تلفن همراهOONI Probe کار می‌کنند.", "Nettest.Button.Install": "نصب", "Notice.Paste": "توجه: اگر فهرست طولانی از نشانی‌های اینترنتی برای افزودن دارید، می‌توانید آنها را کپی کرده و در یکی از کادرهای زیر جایگذاری کنید.", - "WhatCanYouDoText.WebCensorship": "وب‌سایت‌هایی را در زیر اضافه کنید که می‌خواهید برای سانسور آزمایش کنید. برای ایجاد پیوند بر اساس آن وب‌سایت‌ها، روی \"تولید کردن\" کلیک کنید. آن پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید تا بتوانند وب‌سایت‌های مورد نظر شما را آزمایش کنند!" -} + "WhatCanYouDoText.WebCensorship": "وب‌سایت‌هایی را در زیر اضافه کنید که می‌خواهید برای سانسور آزمایش کنید. برای ایجاد پیوند بر اساس آن وب‌سایت‌ها، روی \\\"تولید کردن\\\" کلیک کنید. آن پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید تا بتوانند وب‌سایت‌های مورد نظر شما را آزمایش کنند!" +} \ No newline at end of file diff --git a/public/static/lang/id.json b/public/static/lang/id.json new file mode 100644 index 0000000..3f6e51d --- /dev/null +++ b/public/static/lang/id.json @@ -0,0 +1,143 @@ +{ + "Hero.SubTitle": "Berkoordinasilah dengan komunitas Anda untuk mendeteksi pemblokiran situs web", + "Button.Generate": "Buat tautan", + "Button.Update": "Perbarui", + "Share.Twitter.Button": "Cuitan", + "Share.Twitter.Tweet": "Jalankan OONI Probe untuk mengetes situs web terhadap sensor!", + "Home.Heading.TestName": "Nama Tes", + "Modal.Button.Link": "Buka tautan di OONI Probe", + "Modal.Heading.ShareThisURL": "Bagikan tautan ini", + "Nettest.Heading.HaveMobileApp": "Apakah Anda sudah memasang OONI Probe Mobile?", + "Nettest.Text.HaveMobileApp": "Klik tombol di bawah untuk memasang tautan OONI Run di OONI Probe.", + "Nettest.Button.Run": "Jalankan di aplikasi", + "Nettest.Heading.InstallApp": "Tidak punya aplikasi OONI Probe?", + "Nettest.Text.InstallApp": "Pasang OONI Probe Mobile dari toko aplikasi dan klik tautan OONI Run kembali.", + "Nettest.Button.Install": "Pasang", + "Nettest.DownloadAndroid": "Pasang OONI Probe di Android", + "Nettest.DownloadIOS": "Pasang OONI Probe di iOS", + "Nettest.DownloadFdroid": "Pasang OONI Probe di F-Droid", + "Notice.Paste": "Catatan: Jika Anda memiliki daftar URL yang panjang untuk ditambahkan, Anda dapat menyalin dan menempelkannya ke salah satu kotak di bawah ini.", + "WhatCanYouDoText.WebCensorship": "Di bawah ini Anda dapat membuat tautan yang dapat Anda bagikan dengan komunitas Anda untuk mengetes situs web terhadap sensor.\n\nUntuk membuat tautan, tambahkan URL di bawah yang ingin Anda tes terhadap sensor. Untuk mendorong komunitas Anda melakukan pengetesan, ubah suaikan tautan Anda dengan menambahkan judul dan deskripsi. Setelah selesai, klik tombol \"Buat tautan\" dan bagikan tautan yang dihasilkan dengan pengguna [aplikasi OONI Probe mobile](https://ooni.org/install/mobile) sehingga mereka dapat mengetes situs web pilihan Anda!", + "Error.Empty": "Tidak boleh kosong", + "Error.UrlFormat": "Mohon sertakan format URL yang valid misalnya \"https://ooni.org/post/\"", + "Home.About": "OONI Run mendukung upaya komunitas yang bertujuan mendeteksi pemblokiran situs web. Buat tautan OONI Run untuk mengetes situs web pilihan Anda!", + "Home.Box1.Title": "Respons cepat", + "Home.Box1.Description": "Apakah negara Anda akan menyelenggarakan pemilu? Terjadinya sensor sering kali [muncul](https://ooni.org/reports/) di seluruh dunia selama pemilu, protes, dan acara politik lainnya. Jika Anda menduga bahwa situs web tertentu mungkin diblokir selama peristiwa politik, gunakan platform ini untuk membuat tautan OONI Run bagi pengetesannya. Bagikan tautan tersebut dengan pengguna [OONI Probe](https://ooni.org/install/mobile) untuk mengumpulkan bukti pemblokiran!", + "Home.Box2.Title": "Penelitian sensor", + "Home.Box2.Description": "Tertarik untuk meneliti pemblokiran situs web tertentu? Gunakan platform ini untuk membuat tautan OONI Run bagi pengetesan situs web yang Anda minati. Bagikan tautan tersebut dengan pengguna [OONI Probe](https://ooni.org/install/mobile) di berbagai negara! Pelajari [bagaimana anggota komunitas menggunakan OONI Run sebagai bagian dari upaya penelitian mereka](https://ooni.org/support/ooni-censorship-measurement-campaigns).", + "Home.Box3.Title": "Pantau situs Anda", + "Home.Box3.Description": "Tertarik untuk memantau pemblokiran situs web Anda di seluruh dunia? Saat situs web Anda dites oleh pengguna [OONI Probe](https://ooni.org/install/), Anda akan mendapatkan [data terbuka waktu nyata](https://ooni.org/data/) yang menunjukkan bagaimana pemblokiran tersebut diterapkan secara teknis serta pada jaringan mana pemblokiran tersebut dilakukan. Gunakan platform ini untuk membuat tautan OONI Run bagi pengetesan situs web Anda!", + "Home.Button.CreateRunLink": "Buat tautan OONI Run", + "Home.Button.Login": "Masuk untuk membuat tautan OONI Run", + "Nettest.DeprecationWarning": "Versi tautan OONI Run ini akan dihentikan pada tanggal 1 Januari 2025.\nUntuk bermigrasi ke versi terbaru (OONI Run v2), masuk dan buat tautan baru.", + "List.Title": "Tautan OONI Run Saya", + "List.Empty": "Anda tidak memiliki tautan OONI Run", + "List.Button.Create": "Buat tautan pertama Anda", + "LinkView.Error.DoesNotExist": "Tautan OONI Run tidak ada", + "LinkView.Error.ServerError": "Ada yang salah.", + "TestListForm.Validation.Required": "Bidang yang wajib diisi", + "TestListForm.Validation.Min2": "Harus minimal 2 karakter.", + "TestListForm.Validation.Max50": "Harus lebih pendek dari 50 karakter.", + "TestListForm.Validation.FutureDate": "Tanggal kedaluwarsa harus di masa mendatang.", + "TestListForm.Validation.Min1Url": "Setidaknya diperlukan 1 URL.", + "TestListForm.MigrationModalLink": "Apakah Anda memiliki tautan OONI Run v1 yang lama? Klik di sini untuk menambahkan URL dari tautan tersebut.", + "TestListForm.Label.Color": "Warna", + "TestListForm.Label.TestListName": "Judul tautan OONI Run Anda", + "TestListForm.Label.ShortDescription": "Deskripsi singkat", + "TestListForm.Label.Description": "Deskripsi", + "TestListForm.Label.Email": "Surel pembuat", + "TestListForm.Label.ExpirationDate": "Tanggal Kedaluwarsa", + "TestListForm.Label.Icon": "Ikon", + "TestListForm.OptionsFields.Key": "Kunci", + "TestListForm.OptionsFields.Value": "Nilai", + "TestListForm.OptionsFields.AddOption": "Tambahkan opsi", + "TestListForm.NettestFields.Urls": "URL", + "TestListForm.Intl.Language": "Bahasa", + "TestListForm.Intl.Translation": "Terjemahan", + "TestListForm.Intl.AddTranslation": "Tambahkan Terjemahan", + "TestListForm.Inputs.AddInput": "Tambahkan URL", + "TestListForm.Icon.Select": "Pilih ikon", + "TestListForm.Icon.Replace": "Ganti ikon", + "TestListForm.AdminNettests.Tests": "Tes", + "TestListForm.AdminNettests.AddTest": "Tambahkan Tes", + "TestListForm.AdminNettests.DeleteTest": "Hapus Tes", + "TestListForm.AdminNettests.EnableManualRun": "Aktifkan pengoperasian manual", + "TestListForm.AdminNettests.EnableBackgroundRun": "Aktifkan pengoperasian di latar belakang", + "TestListForm.AdminNettests.BackendOptions": "Opsi Belakang", + "TestListForm.AdminNettests.Options": "Opsi", + "MigrationModal.RunLink": "Tautan OONI Run", + "MigrationModal.AddUrls": "Tambahkan URL", + "General.Cancel": "Batalkan", + "General.Edit": "Sunting", + "RevisionView.TopNotice": "Ini adalah revisi dari {date}. Kembali ke tautan saat ini.", + "RevisionView.LinkInfo": "Info Tautan", + "DescriptorDetails.CreatedByOn": "Dibuat oleh {author} pada {date}.", + "DescriptorDetails.CreatedOn": "Dibuat pada {date}.", + "DescriptorDetails.LastUpdated": "Terakhir diperbarui {date}.", + "DescriptorDetails.ExpirationDate": "Tanggal kedaluwarsa {date}.", + "DescriptorDetails.ExpirationNotice": "Tautan Anda kedaluwarsa pada {date}", + "DescriptorDetails.UpdateButton": "Perbarui sekarang", + "DescriptorView.LinkContent": "Konten Tautan", + "Revisions.Title": "Revisi sebelumnya", + "ArchivedTag.Expired": "KEDALUWARSA", + "DescriptorCard.CreatedBy": "Dibuat oleh {author}", + "DescriptorCard.Updated": "Diperbarui {date}", + "DescriptorCard.Expired": "Kedaluwarsa {date}", + "DescriptorCard.Expiring": "Akan kedaluwarsa{date}", + "Navbar.Login": "Masuk", + "Navbar.Logout": "Keluar", + "Navbar.List": "Tautan OONI Run Saya", + "Navbar.Create": "Buat Tautan OONI Run Link", + "Login.Title": "Silakan masuk untuk melanjutkan", + "Login.EnterEmail": "Tambahkan alamat surel Anda dan klik tautan yang dikirim ke surel Anda untuk masuk.\n\nSaat Anda membuat tautan OONI Run, kami akan menyimpan alamat surel Anda. Hal ini memungkinkan pengguna OONI Probe yang menerima tautan OONI Run Anda untuk mempercayainya.", + "Login.Submitted": "Permintaan masuk anda telah dikirim. Silakan cek surel anda untuk mendapatkan tautan guna mengaktifkan dan masuk ke akun anda.", + "Login.LoggingIn": "Sedang Masuk...", + "Login.Failure": "Coba masuk kembali", + "Login.Button": "Kirimkan saya tautannya", + "Login.Success": "Berhasil masuk. Mengalihkan...", + "Footer.Text.Slogan": "Komunitas global mengukur penyensoran internet di seluruh dunia.", + "Footer.Heading.About": "Tentang", + "Footer.Heading.OONIProbe": "OONI Probe", + "Footer.Heading.Updates": "Pembaruan", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "Kebijakan Data", + "Footer.Link.DataLicense": "Lisensi Data", + "Footer.Link.Contact": "Kontak", + "Footer.Link.Probe": "Pasang", + "Footer.Link.Tests": "Tes", + "Footer.Link.Code": "Kode sumber", + "Footer.Link.API": "API", + "Footer.Link.Blog": "Blog", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "Daftar surat", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "Konten tersedia di bawah lisensi Creative Commons.", + "Tests.WebConnectivity.Name": "Tes Konektivitas Web", + "Tests.Telegram.Name": "Tes Telegram", + "Tests.Facebook.Name": "Tes Facebook Messenger", + "Tests.WhatsApp.Name": "Tes WhatsApp", + "Tests.Signal.Name": "Tes Signal", + "Tests.HTTPInvalidReqLine.Name": "Tes Jalur Permintaan HTTP Tidak Valid", + "Tests.HTTPHeaderManipulation.Name": "Tes Manipulasi Bidang Header HTTP", + "Tests.NDT.Name": "Tes Kecepatan NDT", + "Tests.Dash.Name": "Tes Streaming Video DASH", + "Tests.TorVanilla.Name": "Tes Tor (Vanilla)", + "Tests.BridgeReachability.Name": "Tes Jangkauan Jembatan Tor", + "Tests.TCPConnect.Name": "Tes Koneksi TCP", + "Tests.DNSConsistency.Name": "Tes Konsistensi DNS", + "Tests.HTTPRequests.Name": "Tes Permintaan HTTP", + "Tests.Psiphon.Name": "Tes Psiphon", + "Tests.Tor.Name": "Tes Tor", + "Tests.RiseupVPN.Name": "Tes RiseupVPN", + "Tests.TorSnowflake.Name": "Tes Tor Snowflake", + "Tests.DNSCheck.Name": "Cek DNS", + "Tests.StunReachability.Name": "Keterjangkauan STUN", + "Tests.URLGetter.Name": "Pengambilan URL", + "Tests.ProbeWeb.Name": "Web OONI Probe", + "DateRange.OneWeek": "Satu minggu", + "DateRange.OneMonth": "Satu bulan", + "DateRange.SixMonths": "Enam bulan", + "DateRange.Apply": "Terapkan", + "DateRange.Cancel": "Batalkan" +} \ No newline at end of file diff --git a/public/static/lang/km.json b/public/static/lang/km.json new file mode 100644 index 0000000..75aa818 --- /dev/null +++ b/public/static/lang/km.json @@ -0,0 +1,143 @@ +{ + "Hero.SubTitle": "សហការជាមួយសហគមន៍អ្នកដើម្បីស្វែងរកវែបសាយដែលត្រូវបានបិទ", + "Button.Generate": "បង្កើតតំណរភ្ជាប់", + "Button.Update": "បច្ចុប្បន្នភាព", + "Share.Twitter.Button": "ធ្វីត", + "Share.Twitter.Tweet": "ដំណើរការ​ OONI Probe ដើម្បីតេស្តរកមើលវែបសាយដែលត្រូវបានរឹតត្បិត!", + "Home.Heading.TestName": "ឈ្មោះសាកល្បង", + "Modal.Button.Link": "បើកតំណរភ្ជាប់នៅក្នុង OONI Probe", + "Modal.Heading.ShareThisURL": "ចែករំលែកតំណរភ្ជាប់នេះ", + "Nettest.Heading.HaveMobileApp": "តើអ្នកបានតំឡើងកម្មវិធី OONI Probeក្នុងទូរស័ព្ទដែរ ឬទេ?", + "Nettest.Text.HaveMobileApp": "ចុចប៊ូតុងខាងក្រោមដើម្បីតំឡើងតំណរភ្ជាប់ OONI Run ក្នុង OONI Probe។", + "Nettest.Button.Run": "ដំណើរការក្នុងកម្មវិធី", + "Nettest.Heading.InstallApp": "តើអ្នកមិនទាន់មានកម្មវិធី OONI Probeមែនទេ?", + "Nettest.Text.InstallApp": "ដំឡើងកម្មវិធី OONI Probe ក្នុងទូរស័ព្ទពី app store ហើយចុចលើតំណរភ្ជាប់ OONI Runម្ដងទៀត។", + "Nettest.Button.Install": "ដំឡើង", + "Nettest.DownloadAndroid": "ដំឡើង OONI Probe លើ Android", + "Nettest.DownloadIOS": "ដំឡើង OONI Probe​ លើ iOS", + "Nettest.DownloadFdroid": "ដំឡើង OONI Probe លើ F-Droid", + "Notice.Paste": "បញ្ជាក់៖ បើអ្នកមានបញ្ជី URLs វែងត្រូវដាក់បញ្ជូល អ្នកអាចចម្លង ហើយទម្លាក់នៅក្នុងប្រអប់ណាមួយខាងក្រោម។", + "WhatCanYouDoText.WebCensorship": "អ្នកអាចបង្កើតតំណរភ្ជាប់ខាងក្រោម ដែលអាចចែករំលែកជាមួយសហគមន៍អ្នកដើម្បីតេស្តរកមើលវែបសាយដែលត្រូវបានរឹតត្បិត។\n\nដើម្បីបង្កើតតំណរភ្ជាប់ ដាក់បន្ថែម URLs នៅខាងក្រោមដែលអ្នកអាចតេស្តរកមើលការរឹតត្បិតនានា។ ដើម្បីលើកទឹកចិត្តអោយសហគមន៍អ្នកដំណើរការតេស្ត អ្នកអាចបន្ថែមចំណងជើង និងការពិពណ៌នាក្នុងតំណរភ្ជាប់អ្នក។ ចុចលើ \"បង្កើតតំណរភ្ជាប់\" នៅពេលអ្នកសរសេរចប់ ហើយចែករំលែកតំណរភ្ជាប់ដែលបានបង្កើតនោះជាមួយ [OONI Probe mobile app](https://ooni.org/install/mobile) អ្នកប្រើប្រាស់ ដើម្បីអោយពួកគេអាចតេស្តវែបសាយដែលអ្នកបានជ្រើសរើស។", + "Error.Empty": "មិនអាចទុកចន្លោះទទេ", + "Error.UrlFormat": "សូមដាក់ទម្រង់ URL ដែលត្រឹមត្រូវ។ ឧ. \"https://ooni.org/post/\"", + "Home.About": "OONI Run កិច្ចខិតខំប្រឹងប្រែងរបស់សហគមន៍ដែលស្វះស្វែងរកការបិទខ្ទប់វែបសាយ។ បង្កើតតំណរភ្ជាប់ OONI Run ដើម្បីតេស្តវែបសាយនានាតាមជម្រើសរបស់អ្នក!", + "Home.Box1.Title": "ការឆ្លើយតបភ្លាមៗ", + "Home.Box1.Description": "តើប្រទេសរបស់អ្នកជិតមានការបោះឆ្នោតមែនទេ? ការរឹតត្បិតកើតឡើងជាញឹកញាប់ [emerge](https://ooni.org/reports/) នៅជុំវិញពិភពលោកកំឡុងពេលបោះឆ្នោត បាតុកម្ម និងព្រឹត្តិការណ៍នយោបាយនានា។ ប្រើសិនបើអ្នកសង្ស័យថាវែបសាយណាមួយ ដែលអាចនឹងត្រូវបានបិទខ្ទប់កំឡុងពេលព្រឹត្តិការណ៍នយោបាយណាមួយ សូមប្រើទម្រង់នេះដើម្បីបង្កើតតំណរភ្ជាប់ OONI Run សម្រាប់តេស្ត។ ចែករំលែកតំណរភ្ជាប់ជាមួយ [OONI Probe](https://ooni.org/install/mobile) អ្នកប្រើប្រាស់ដទៃ ដើម្បីប្រមូលភស្តុតាងនៃការបិទខ្ទប់!", + "Home.Box2.Title": "ការស្រាវជ្រាវពីការរឹតត្បិត", + "Home.Box2.Description": "តើអ្នកចាប់អារម្មណ៍ស្រាវជ្រាវពីការបិទវែបសាយជាក់លាក់ណាមួយទេ? ប្រើទម្រង់មួយនេះដើម្បីបង្កើតតំណរភ្ជាប់ OONI Run ដើម្បីតេស្តពីវែបសាយដែលអ្នកចាប់អារម្មណ៍។ ចែករំលែកតំណរភ្ជាប់ជាមួយអ្នកប្រើប្រាស់ [OONI Probe](https://ooni.org/install/mobile) នៅក្នុងប្រទេសផ្សេងៗ។ ស្វែងយល់បន្ថែម [អំពីរបៀបដែលសហគមន៍ប្រើប្រាស់ OONI Run ជាផ្នែកនៃការស្រាវជ្រាវរបស់គេ](https://ooni.org/support/ooni-censorship-measurement-campaigns)។", + "Home.Box3.Title": "ឃ្លាំមើលវែបសាយអ្នក", + "Home.Box3.Description": "តើអ្នកចាប់អារម្មណ៍ឃ្លាំមើលការបិទវែបសាយនៅក្នុងពិភពលោកដែរ ឬទេ? អ្នកអាចអោយអ្នកប្រើប្រាស់ [OONI Probe](https://ooni.org/install/) តេស្តវែបសាយរបស់អ្នក ហើយអ្នកនឹងទទួលបាន [ទិន្នន័យបើចំហរភ្នាមៗ](https://ooni.org/data/) ដែលបង្ហាញពីបច្ចេកទេសដែលគេប្រើដើម្បីបិទវែបសាយនោះ និងបណ្ដាញណាខ្លះដែលត្រូវបានបិទដែរ។ សូមប្រើទម្រង់មួយនេះដើម្បីបង្កើតតំណរភ្ជាប់ OONI Run សម្រាប់តេស្តវែបសាយរបស់អ្នក!", + "Home.Button.CreateRunLink": "បង្កើតតំណរភ្ជាប់ OONI Run", + "Home.Button.Login": "ចុចចូលដើម្បីបង្កើតតំណរភ្ជាប់ OONI Run", + "Nettest.DeprecationWarning": "តំណរភ្ជាប់ OONI Run ជំនាន់នេះនឹងផ្អាកដំណើរការចាប់ពីថ្ងៃទី 1 ខែមករា ឆ្នាំ2025។\nដើម្បីទទួលបានជំនាន់ចុងក្រោយនៃ (OONI Run v2), ចូលប្រើ ហើយបង្កើតតំណរភ្ជាប់ថ្មី។", + "List.Title": "តំណរភ្ជាប់ OONI Run របស់ខ្ញុំ", + "List.Empty": "អ្នកមិនមានតំណរភ្ជាប់ OONI Run ទេ។", + "List.Button.Create": "បង្កើតតំណរភ្ជាប់ដំបូងរបស់អ្នក", + "LinkView.Error.DoesNotExist": "តំណរភ្ជាប់ OONI Run នេះមិនមានទេ", + "LinkView.Error.ServerError": "មានអ្វីមួយខុសប្រក្រតី។", + "TestListForm.Validation.Required": "ចំនុចត្រូវការ", + "TestListForm.Validation.Min2": "យ៉ាងហោចណាស់​ 2 តួរ", + "TestListForm.Validation.Max50": "គួរតែខ្លីជាង 50 តួរ", + "TestListForm.Validation.FutureDate": "កាលបរិច្ឆេទផុតកំណត់គួរតែនៅអនាគត។", + "TestListForm.Validation.Min1Url": "យ៉ាងហោចណាស់ត្រូវមាន URL 1", + "TestListForm.MigrationModalLink": "តើអ្នកមានតំណរភ្ជាប់ចាស់របស់ OONI Run ជំនាន់ទី1ទេ? ចុចទីនេះដើម្បីបន្ថែម URLs ពីតំណរភ្ជាប់ចាស់។", + "TestListForm.Label.Color": "ពណ៌", + "TestListForm.Label.TestListName": "ដាក់ចំណងជើងតំណរភ្ជាប់ OONI Run អ្នក", + "TestListForm.Label.ShortDescription": "ការពិពណ៌នាខ្លី", + "TestListForm.Label.Description": "ការពណ៌នា", + "TestListForm.Label.Email": "អាសយដ្ឋានអុីម៉ែលកវី", + "TestListForm.Label.ExpirationDate": "កាលបរិច្ឆេទផុតកំណត់", + "TestListForm.Label.Icon": "រូបដំណាង", + "TestListForm.OptionsFields.Key": "កូនសោរ", + "TestListForm.OptionsFields.Value": "តម្លៃ", + "TestListForm.OptionsFields.AddOption": "បន្ថែមជម្រើស", + "TestListForm.NettestFields.Urls": "URLs", + "TestListForm.Intl.Language": "ភាសា", + "TestListForm.Intl.Translation": "ការបកប្រែ", + "TestListForm.Intl.AddTranslation": "បន្ថែមការបកប្រែ", + "TestListForm.Inputs.AddInput": "បន្ថែម URL", + "TestListForm.Icon.Select": "ជ្រើសរើសរូបតំណាង", + "TestListForm.Icon.Replace": "ជំនួសរូបតំណាង", + "TestListForm.AdminNettests.Tests": "តេស្ត", + "TestListForm.AdminNettests.AddTest": "បន្ថែមតេស្ត", + "TestListForm.AdminNettests.DeleteTest": "លុបតេស្ត", + "TestListForm.AdminNettests.EnableManualRun": "បើកដំណើរការដោយផ្ទាល់ដៃ", + "TestListForm.AdminNettests.EnableBackgroundRun": "បើកដំណើរការនៅខាងក្រោយឆាក", + "TestListForm.AdminNettests.BackendOptions": "ជម្រើសច្រកក្រោយ", + "TestListForm.AdminNettests.Options": "ជម្រើស", + "MigrationModal.RunLink": "តំណរភ្ជាប់ OONI Run", + "MigrationModal.AddUrls": "បន្ថែម URLs", + "General.Cancel": "បោះបង់", + "General.Edit": "កែសម្រួល", + "RevisionView.TopNotice": "នេះជាការពិនិត្យឡើងវិញពី {date}។ ត្រឡប់ទៅ តំណរភ្ជាប់បច្ចុប្បន្ន.", + "RevisionView.LinkInfo": "ព័ត៌មានតំណរភ្ជាប់", + "DescriptorDetails.CreatedByOn": "បង្កើតឡើងដោយ {កវី} នៅ {date}.", + "DescriptorDetails.CreatedOn": "បង្កើតឡើងនៅ {date}.", + "DescriptorDetails.LastUpdated": "បច្ចុប្បន្នភាពចុងក្រោយនៅ {date}.", + "DescriptorDetails.ExpirationDate": "កាលបរិច្ឆេទផុតកំណត់នៅ {date}.", + "DescriptorDetails.ExpirationNotice": "តំណរភ្ជាប់អ្នកផុតកំនត់នៅ {date}", + "DescriptorDetails.UpdateButton": "ធ្វើបច្ចុប្បន្នភាពឥឡូវនេះ", + "DescriptorView.LinkContent": "តំណរភ្ជាប់មាតិការ", + "Revisions.Title": "ការត្រួតពិនិត្យលើកមុន", + "ArchivedTag.Expired": "ផុតកំណត់", + "DescriptorCard.CreatedBy": "បង្កើតដោយ {កវី}", + "DescriptorCard.Updated": "បានធ្វើបច្ចុប្បន្នភាព{date}", + "DescriptorCard.Expired": "បានផុតកំនត់{date}", + "DescriptorCard.Expiring": "កំពុងផុតកំនត់ {date}", + "Navbar.Login": "ចូលប្រើ", + "Navbar.Logout": "ចាកចេញ", + "Navbar.List": "តំណរភ្ជាប់ OONI Run របស់ខ្ញុំ", + "Navbar.Create": "បង្កើតតំណរភ្ជាប់ OONI Run", + "Login.Title": "សូមចុចចូលប្រើដើម្បីបន្ត", + "Login.EnterEmail": "បន្ថែមអុីម៉ែលរបស់អ្នក ហើយចុចតំណរភ្ជាប់ដែលបានផ្ញើរទៅអុីម៉ែលអ្នកដើម្បីចូលប្រើ។\n\nនៅពេលអ្នកបង្កើតតំណរភ្ជាប់ OONI Run ពួកយើងនឹងរក្សាទុកអុីម៉ែលរបស់អ្នក។ វិធីនេះនឹងធ្វើអោយអ្នកប្រើប្រាស់ OONI Probe ដែលទទួលបានតំណរភ្ជាប់ពីអ្នកមានទំនុកចិត្ត។", + "Login.Submitted": "ការស្នើចូលរបស់អ្នកត្រូវបានដាក់បញ្ជូល។ សូមពិនិត្យមើលអុីមែលរបស់អ្នកសម្រាប់ដំណើរការតំណភ្ជាប់ និងចូលប្រើគណនីរបស់អ្នក។", + "Login.LoggingIn": "កំពុងចូលប្រើ...", + "Login.Failure": "សូមព្យាយាមចូលប្រើម្ដងទៀត", + "Login.Button": "ផ្ញើរតំណរភ្ជាប់អោយខ្ញុំ", + "Login.Success": "បានចូលប្រើដោយជោគជ័យ។ កំពុងភ្ជាប់ទៅកាន់...", + "Footer.Text.Slogan": "សហគមន៍សកលដែលកំពុងវាស់វែងការរឹតត្បឹតអុីនធឺណិតនៅជុំវិញពិភពលោក។", + "Footer.Heading.About": "អំពី", + "Footer.Heading.OONIProbe": "កម្មវិធីតាមដាន​ការ​រឹតត្បិត​ការ​ប្រើ​ប្រាស់​អ៊ីន​ធឺ​ណិត", + "Footer.Heading.Updates": "បច្ចុប្បន្នភាព", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "គោលនយោបាយទិន្នន័យ", + "Footer.Link.DataLicense": "អាជ្ញាប័ណ្ណទិន្នន័យ", + "Footer.Link.Contact": "ទំនាក់ទំនង", + "Footer.Link.Probe": "ដំឡើង", + "Footer.Link.Tests": "តេស្ត", + "Footer.Link.Code": "ប្រភពកូដ", + "Footer.Link.API": "API", + "Footer.Link.Blog": "ប្លក់", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "បញ្ជីអាសយដ្ឋានអុីម៉ែល", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "មាតិការស្ថិតនៅក្រោមអាជ្ញារប័ណ្ណ Creative Commons។", + "Tests.WebConnectivity.Name": "តេស្តការភ្ជាប់វែបសាយ", + "Tests.Telegram.Name": "តេស្ត Telegram ", + "Tests.Facebook.Name": "តេស្ត Facebook Messenger ", + "Tests.WhatsApp.Name": "តេស្ត WhatsApp ", + "Tests.Signal.Name": "តេស្ត Signal", + "Tests.HTTPInvalidReqLine.Name": "តេស្តបណ្ដាញស្នើរ HTTP​ ដែលមិនត្រឹមត្រូវ", + "Tests.HTTPHeaderManipulation.Name": "តេស្តរកកន្លែងការរៀបចំក្បាល HTTP ", + "Tests.NDT.Name": "តេស្តល្បឿន NDT", + "Tests.Dash.Name": "តេស្តល្បឿនការចាក់វីដេអូលើ DASH", + "Tests.TorVanilla.Name": "តេស្ត Tor (Vanilla)", + "Tests.BridgeReachability.Name": "តេស្តការភ្ជាប់ទៅកាន់ច្រករបស់ Tor", + "Tests.TCPConnect.Name": "តេស្តការភ្ជាប់ TCP", + "Tests.DNSConsistency.Name": "តេស្តភាពស្ថិតស្ថេរនៃ DNS", + "Tests.HTTPRequests.Name": "តេស្តសំណើរសុំ HTTP", + "Tests.Psiphon.Name": "តេស្ត Psiphon", + "Tests.Tor.Name": "តេស្ត Tor", + "Tests.RiseupVPN.Name": "តេស្ត RiseupVPN", + "Tests.TorSnowflake.Name": "តេស្ត Tor Snowflake", + "Tests.DNSCheck.Name": "ពិនិត្យ DNS", + "Tests.StunReachability.Name": "ការភ្ជាន់ទៅកាន់ STUN", + "Tests.URLGetter.Name": "URL Getter", + "Tests.ProbeWeb.Name": "OONI Probe Web", + "DateRange.OneWeek": "មួយសប្ដាហ៍", + "DateRange.OneMonth": "មួយខែ", + "DateRange.SixMonths": "ប្រាំមួយខែ", + "DateRange.Apply": "អនុវត្ត", + "DateRange.Cancel": "បោះបង់" +} \ No newline at end of file diff --git a/public/static/lang/pt-br.json b/public/static/lang/pt-br.json index 1d144e9..f26a285 100644 --- a/public/static/lang/pt-br.json +++ b/public/static/lang/pt-br.json @@ -21,5 +21,7 @@ "Nettest.Text.InstallApp": "Atualmente, os links OONI Run funcionam apenas com o aplicativo móvel OONI Probe", "Nettest.Button.Install": "Instalar", "Notice.Paste": "Observação: se você tiver uma longa lista de URLs para adicionar, poderá copiá-los e colá-los em uma das caixas abaixo", - "WhatCanYouDoText.WebCensorship": "Adicione os sites abaixo que você gostaria de testar quanto à censura. Clique em \"Gerar\" para criar um link com base nesses sites. Compartilhe esse link com os usuários do aplicativo móvel OONI Probe para que eles possam testar os sites de sua escolha" -} + "WhatCanYouDoText.WebCensorship": "Adicione abaixo os sites que você gostaria de testar quanto à censura. Clique em “Gerar” para criar um link baseado nesses sites. Compartilhe esse link com os usuários do aplicativo móvel OONI Probe para que eles possam testar os sites de sua escolha!", + "Error.Empty": "Não pode estar vazio.", + "Error.UrlFormat": "Deve ser um formato de URL válido, por exemplo, \"https://ooni.org/post/\"" +} \ No newline at end of file diff --git a/public/static/lang/ru.json b/public/static/lang/ru.json index b8bc1cb..2357491 100644 --- a/public/static/lang/ru.json +++ b/public/static/lang/ru.json @@ -1,25 +1,143 @@ { - "Hero.SubTitle": "Координируйте мониторинг интернет-цензуры", - "Title.URLs": "URLs", - "Button.AddUrl": "Добавить ссылку", + "Hero.SubTitle": "Работайте вместе со своим сообществом, чтобы обнаружить блокировки сайтов", "Button.Generate": "Создать ссылку", - "Share.Twitter.Tweet": "Запустить OONI Probe, чтобы начать тестирование", + "Button.Update": "Обновить", + "Share.Twitter.Button": "Опубликовать", + "Share.Twitter.Tweet": "Запустите OONI Probe, чтобы протестировать сайты на присутствие цензуры!", "Home.Heading.TestName": "Название теста", - "Sidebar.WebConnectivity.Title": "Интернет-цензура", - "Sidebar.Performance.Title": "Скорость и производительность", - "Sidebar.Middleboxes.Title": "ТСПУ (middleboxes)", - "Modal.Heading.LinkReady": "Ваша ссылка готова!", - "Modal.Heading.ShareIt": "Поделиться в социальных сетях", - "Modal.Button.Link": "Ссылка", - "Modal.Heading.ShareThisURL": "Поделиться ссылкой с пользователями мобильного приложения OONI Probe", - "Modal.Heading.EmbedThisCode": "Или вставить этот код на ваш сайт", - "Modal.Button.Done": "Сделано", - "Nettest.Heading.HaveMobileApp": "У вас уже установлено приложение OONI Probe", - "Nettest.Text.HaveMobileApp": "Нажмите «Запустить» и откройте эту ссылку с помощью мобильного приложения OONI Probe, чтобы начать тестирование.", - "Nettest.Button.Run": "Запустить", - "Nettest.Heading.InstallApp": "Установить мобильное приложение OONI Probe", - "Nettest.Text.InstallApp": "На данный момент ссылки OONI Run работают только с мобильным приложением OONI Probe", + "Modal.Button.Link": "Откройте ссылку в OONI Probe", + "Modal.Heading.ShareThisURL": "Поделиться ссылкой", + "Nettest.Heading.HaveMobileApp": "Установлен ли у вас на мобильном OONI Probe? ", + "Nettest.Text.HaveMobileApp": "Нажмите кнопку внизу, чтобы установить ссылку OONI Run в вашем приложении OONI Probe.", + "Nettest.Button.Run": "Запустить в приложении", + "Nettest.Heading.InstallApp": "У вас нет приложения OONI Probe? ", + "Nettest.Text.InstallApp": "Установите мобильное приложение OONI Probe из вашего маркетплейса приложений и еще раз нажмите на ссылку OONI Run. ", "Nettest.Button.Install": "Установить", - "Notice.Paste": "Внимание: Если список ссылок, который вы хотите добавить, очень длинный, то вы можете скопировать весь список и вставить в одну из строк ниже. ", - "WhatCanYouDoText.WebCensorship": "В строки ниже можно добавлять сайты, которые вы хотите протестировать на присутствие цензуры. Нажмите «Создать», чтобы сгенерировать ссылку для тестирования, основанную на вашем списке сайтов. Поделитесь этой ссылкой с другими пользователями мобильного приложения OONI Probe, чтобы они тоже смогли протестировать ваш список сайтов!" -} + "Nettest.DownloadAndroid": "Установить OONI Probe на Android", + "Nettest.DownloadIOS": "Установить OONI Probe на iOS", + "Nettest.DownloadFdroid": "Установить OONI Probe на F-Droid", + "Notice.Paste": "Важно: Если вы хотите добавить длинный список ссылок, вы можете скопировать их и вставить в одно поле внизу.", + "WhatCanYouDoText.WebCensorship": "Ниже вы можете создать ссылку, которой вы сможете поделиться с вашим сообществом, чтобы скоординировано тестировать сайты на присутствие цензуры. \n\nЧтобы создать свою ссылку, добавьте сайты, которые вы хотите протестировать на предмет цензуры. Чтобы мотивировать ваше сообщество тестировать эти сайты, добавьте название и описание ссылки. После этого нажмите кнопку «Создать ссылку» и поделитесь созданной ссылкой с пользователями [мобильного приложения OONI Probe](https://ooni.org/install/mobile), чтобы они могли тестировать ваш список сайтов!", + "Error.Empty": "Это поле не может быть пустым", + "Error.UrlFormat": "Пожалуйста, включайте сайты в правильном формате, например, \"https://ooni.org/post/\"", + "Home.About": "OONI Run поддерживает сообщества, занимающиеся мониторингом блокировок сайтов. Создайте ссылку OONI Run, чтобы тестировать собственный список сайтов!", + "Home.Box1.Title": "Ответ на кризисные ситуации", + "Home.Box1.Description": "В вашей стране скоро выборы? Во всем мире цензура часто [случается](https://ooni.org/reports/) во время выборов, протестов, и других политических событий. Если вы подозреваете, что некоторые сайты могут быть заблокированы во время политических событий, используйте эту платформу, чтобы создать ссылку OONI Run и тестировать их на предмет цензуры. Поделитесь этой ссылкой с пользователями [OONI Probe](https://ooni.org/install/mobile), чтобы собрать доказательства блокировок!", + "Home.Box2.Title": "Исследования цензуры", + "Home.Box2.Description": "Хотите исследовать блокировку отдельных сайтов? Используйте эту платформу, чтобы создать ссылку OONI Run и тестировать сайты, которые вам интересны. Поделитесь этой ссылкой с пользователями [приложения OONI Probe](https://ooni.org/install/mobile) в разных странах! Узнайте [как участники нашего сообщества использовали OONI Run для проведения своих исследований](https://ooni.org/support/ooni-censorship-measurement-campaigns).", + "Home.Box3.Title": "Отслеживайте блокировку собственного сайта", + "Home.Box3.Description": "Хотите отслеживать блокировку собственного сайта в разных странах мира? С помощью тестов пользователей [OONI Probe](https://ooni.org/install/), вы можете собирать открытые данные с информацией о том, как и на каких сетях блокируется ваш сайт, в режиме реального времени. Используйте эту платформу для создания ссылки OONI Run и координации тестирования вашего сайта!", + "Home.Button.CreateRunLink": "Создать ссылку OONI Run", + "Home.Button.Login": "Войти, чтобы создать ссылку OONI Run", + "Nettest.DeprecationWarning": "Эта версия ссылок OONI Run будет отключена 1-го января 2025.\nЧтобы обновить ссылки до новой версии (OONI Run v2), залогиньтесь и создайте новые ссылки.", + "List.Title": "Мои ссылки OONI Run", + "List.Empty": "У вас нет ссылок OONI Run", + "List.Button.Create": "Создайте свою первую ссылку", + "LinkView.Error.DoesNotExist": "Ссылка OONI Run не существует ", + "LinkView.Error.ServerError": "Что-то пошло не так.", + "TestListForm.Validation.Required": "Необходимое поле", + "TestListForm.Validation.Min2": "Должно быть как минимум два символа. ", + "TestListForm.Validation.Max50": "Должно быть меньше 50 символов.", + "TestListForm.Validation.FutureDate": "Дата окончания действия ссылки должна быть в будущем.", + "TestListForm.Validation.Min1Url": "Необходимо добавить как минимум одну ссылку.", + "TestListForm.MigrationModalLink": "У вас есть старые OONI Run v1 ссылки? Нажмите сюда, чтобы добавить сайты из таких ссылок. ", + "TestListForm.Label.Color": "Цвет", + "TestListForm.Label.TestListName": "Название ссылки OONI Run", + "TestListForm.Label.ShortDescription": "Краткое описание", + "TestListForm.Label.Description": "Описание", + "TestListForm.Label.Email": "Email автора", + "TestListForm.Label.ExpirationDate": "Истекает", + "TestListForm.Label.Icon": "Значок", + "TestListForm.OptionsFields.Key": "Ключ", + "TestListForm.OptionsFields.Value": "Значение", + "TestListForm.OptionsFields.AddOption": "Добавить вариант", + "TestListForm.NettestFields.Urls": "URLs", + "TestListForm.Intl.Language": "Язык", + "TestListForm.Intl.Translation": "Перевод", + "TestListForm.Intl.AddTranslation": "Добавить перевод", + "TestListForm.Inputs.AddInput": "Добавить ссылку", + "TestListForm.Icon.Select": "Выбрать иконку", + "TestListForm.Icon.Replace": "Заменить иконку", + "TestListForm.AdminNettests.Tests": "Тесты", + "TestListForm.AdminNettests.AddTest": "Добавить тест", + "TestListForm.AdminNettests.DeleteTest": "Удалить тест", + "TestListForm.AdminNettests.EnableManualRun": "Разрешить запуск вручную", + "TestListForm.AdminNettests.EnableBackgroundRun": "Разрешить проводить тесты в фоновом режиме", + "TestListForm.AdminNettests.BackendOptions": "Опции бэкенда", + "TestListForm.AdminNettests.Options": "Опции", + "MigrationModal.RunLink": "Ссылка OONI Run ", + "MigrationModal.AddUrls": "Добавить сайты", + "General.Cancel": "Отмена", + "General.Edit": "Редактировать", + "RevisionView.TopNotice": "Это версия от {date}. Обратно к текущей ссылке.", + "RevisionView.LinkInfo": "Информация о ссылке", + "DescriptorDetails.CreatedByOn": "Создано {author} {date}.", + "DescriptorDetails.CreatedOn": "Создано {date}.", + "DescriptorDetails.LastUpdated": "Последнее обновление {date}.", + "DescriptorDetails.ExpirationDate": "Дата окончания срока действия {date}.", + "DescriptorDetails.ExpirationNotice": "Срок действия вашей ссылки заканчивается {date}", + "DescriptorDetails.UpdateButton": "Обновить сейчас", + "DescriptorView.LinkContent": "Содержание ссылки", + "Revisions.Title": "Предыдущие изменения", + "ArchivedTag.Expired": "УСТАРЕЛА", + "DescriptorCard.CreatedBy": "Создано {author}", + "DescriptorCard.Updated": "Обновлено {date}", + "DescriptorCard.Expired": "Срок действия закончился {date}", + "DescriptorCard.Expiring": "Срок действия заканчивается {date}", + "Navbar.Login": "Войти", + "Navbar.Logout": "Выход", + "Navbar.List": "Мои ссылки OONI Run", + "Navbar.Create": "Создать ссылку для запуска OONI", + "Login.Title": "Пожалуйста, залогиньтесь, чтобы продолжить.", + "Login.EnterEmail": "Добавьте ваш почтовый адрес и нажмите на ссылку, которая придет вам на почту, чтобы войти на платформу.\n\nКогда вы создаете ссылку OONI Run, мы храним ваш почтовый адрес. Это позволяет пользователям OONI Probe, которые получат вашу ссылку, доверять ей.", + "Login.Submitted": "Вы отправили запрос на вход в систему. Пожалуйста, проверьте свою почту, там должно появиться письмо со ссылкой для активации и входа в учетную запись.", + "Login.LoggingIn": "Вход в систему...", + "Login.Failure": "Попробуйте залогиниться еще раз", + "Login.Button": "Отправьте мне ссылку", + "Login.Success": "Успешный логин. Перенаправляем вас...", + "Footer.Text.Slogan": "Глобальное сообщество, измеряющее интернет-цензуру по всему миру.", + "Footer.Heading.About": "О приложении", + "Footer.Heading.OONIProbe": "OONI Probe", + "Footer.Heading.Updates": "Обновления", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "Политика использования данных", + "Footer.Link.DataLicense": "Лицензия на работу с данными", + "Footer.Link.Contact": "Контакты", + "Footer.Link.Probe": "Установить приложение", + "Footer.Link.Tests": "Тесты", + "Footer.Link.Code": "Исходный код", + "Footer.Link.API": "API", + "Footer.Link.Blog": "Блог", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "Рассылка", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "Содержание доступно по лицензии Creative Commons.", + "Tests.WebConnectivity.Name": "Web Connectivity тест", + "Tests.Telegram.Name": "Тест Telegram", + "Tests.Facebook.Name": "Тест Facebook Messenger", + "Tests.WhatsApp.Name": "Тест WhatsApp", + "Tests.Signal.Name": "Тест Signal ", + "Tests.HTTPInvalidReqLine.Name": "Тест HTTP Invalid Request Line", + "Tests.HTTPHeaderManipulation.Name": "Тест HTTP Header Field Manipulation", + "Tests.NDT.Name": "Тест скорости NDT", + "Tests.Dash.Name": "Тест видеопотока DASH", + "Tests.TorVanilla.Name": "Tor (Vanilla) тест ", + "Tests.BridgeReachability.Name": "Tor Bridge Reachability тест", + "Tests.TCPConnect.Name": "TCP Connect тест", + "Tests.DNSConsistency.Name": "DNS Consistency тест", + "Tests.HTTPRequests.Name": "HTTP Requests тест ", + "Tests.Psiphon.Name": "Тест Psiphon", + "Tests.Tor.Name": "Тест Tor", + "Tests.RiseupVPN.Name": "RiseupVPN тест", + "Tests.TorSnowflake.Name": "Tor Snowflake тест", + "Tests.DNSCheck.Name": "Проверка DNS", + "Tests.StunReachability.Name": "Доступность STUN", + "Tests.URLGetter.Name": "Получатель URL-адресов", + "Tests.ProbeWeb.Name": "OONI Probe Web", + "DateRange.OneWeek": "Одна неделя", + "DateRange.OneMonth": "Один месяц", + "DateRange.SixMonths": "Шесть месяцев", + "DateRange.Apply": "Применить", + "DateRange.Cancel": "Отмена" +} \ No newline at end of file diff --git a/public/static/lang/th.json b/public/static/lang/th.json index e615202..abdce9b 100644 --- a/public/static/lang/th.json +++ b/public/static/lang/th.json @@ -22,4 +22,4 @@ "Nettest.Button.Install": "ติดตั้ง", "Notice.Paste": "หมายเหตุ: ถ้ารายการ URL ที่จะเพิ่มของคุณยาวมากๆ คุณสามารถทำสำเนามันและวางลงในกล่องใดก็ได้ด้านล่างนี้", "WhatCanYouDoText.WebCensorship": "เพิ่มเว็บไซต์ที่คุณต้องการทดสอบหาการปิดกั้นที่ด้านล่างนี้ คลิก 'สร้าง' เพื่อสร้างลิงก์จากบรรดาเว็บไซต์ดังกล่าว แบ่งปันลิงก์นั้นให้กับผู้ใช้ OONI Probe บนอุปกรณ์พกพาคนอื่นๆ พวกเขาจะได้สามารถทดสอบบรรดาเว็บไซต์ที่คุณเลือกมาได้!" -} +} \ No newline at end of file diff --git a/public/static/lang/tr.json b/public/static/lang/tr.json index 658484d..60b389e 100644 --- a/public/static/lang/tr.json +++ b/public/static/lang/tr.json @@ -1,25 +1,143 @@ { - "Hero.SubTitle": "Site engelleme sınaması düzenleyin", - "Title.URLs": "Adresler", - "Button.AddUrl": "Adres ekle", - "Button.Generate": "Oluştur", - "Share.Twitter.Tweet": "Engellemeyi sınamak için OONI Probe çalıştırın!", + "Hero.SubTitle": "Erişim engellemelerini bulmak için topluluğunuzla hareket edin", + "Button.Generate": "Bağlantı oluştur", + "Button.Update": "Güncelle", + "Share.Twitter.Button": "Tweet at", + "Share.Twitter.Tweet": "Sansürlenen siteleri bulmak için OONI Probe kullanın!", "Home.Heading.TestName": "Sınama adı", - "Sidebar.WebConnectivity.Title": "İnternet sansürü", - "Sidebar.Performance.Title": "Hız ve başarım", - "Sidebar.Middleboxes.Title": "Ara kutular", - "Modal.Heading.LinkReady": "Bağlantınız hazır!", - "Modal.Heading.ShareIt": "Sosyal ağlarda paylaş", - "Modal.Button.Link": "Bağlantı", - "Modal.Heading.ShareThisURL": "Bu bağlantıyı OONI Probe mobil uygulama kullanıcıları ile paylaşın", - "Modal.Heading.EmbedThisCode": "ya da bu kodu sitenize ekleyin", - "Modal.Button.Done": "Tamam", - "Nettest.Heading.HaveMobileApp": "OONI Probe mobil uygulamasına zaten sahipsiniz", - "Nettest.Text.HaveMobileApp": "Sınamayı başlatmak için Çalıştır üzerine dokunup bu bağlantıyı OONI Probe mobil uygulaması ile açın.", - "Nettest.Button.Run": "Çalıştır", - "Nettest.Heading.InstallApp": "OONI Probe mobil uygulamasını kur", - "Nettest.Text.InstallApp": "Şu anda OONI Run bağlantıları yalnızca OONI Probe mobil uygulaması ile çalışır.", + "Modal.Button.Link": "Bağlantıyı OONI Probe ile aç", + "Modal.Heading.ShareThisURL": "Bu bağlantıyı paylaş", + "Nettest.Heading.HaveMobileApp": "OONI Probe Mobil kurulu mu?", + "Nettest.Text.HaveMobileApp": "Aşağıdaki tuşa basarak OONI Run bağlantısını OONI Probe üzerine kurun.", + "Nettest.Button.Run": "Uygulamada çalıştır", + "Nettest.Heading.InstallApp": "OONI Probe uygulaması kurulu değil mi?", + "Nettest.Text.InstallApp": "Mağazadan OONI Probe Mobil uygulamasını yükleyin ve OONI Run bağlantısına tekrar tıklayın.", "Nettest.Button.Install": "Kur", + "Nettest.DownloadAndroid": "Android üzerine OONI Probe kur", + "Nettest.DownloadIOS": "iOS üzerine OONI Probe kur", + "Nettest.DownloadFdroid": "F-Droid üzerine OONI Probe kur", "Notice.Paste": "Not: Eklenecek uzun bir adres listeniz varsa, bunları kopyalayıp aşağıdaki kutulardan birine yapıştırabilirsiniz.", - "WhatCanYouDoText.WebCensorship": "Sansür durumunu sınamak istediğiniz siteleri aşağıya ekleyin. Bu siteleri temel alan bir bağlantı oluşturmak için \"Oluştur\" düğmesine tıklayın. Seçtiğiniz siteleri sınayabilmeleri için bu bağlantıyı OONI Probe mobil uygulaması kullanıcılarıyla paylaşın!" -} + "WhatCanYouDoText.WebCensorship": "Aşağıda, topluluğunuzla paylaşabileceğiniz ve sitelerin engellenme durumunu sınayabileceğiniz bir bağlantı oluşturabilirsiniz.\n\nBağlantınızı oluşturmak için, engellenme durumunu sınamak istediğiniz adresleri aşağıya ekleyin. Topluluğunuzu sınama yapmaya özendirmek için, bir başlık ve açıklama ekleyerek bağlantınızı özelleştirin. İşiniz bittiğinde, \"Bağlantı oluştur\" düğmesine tıklayın ve oluşturulan bağlantıyı [OONI Probe mobil uygulaması](https://ooni.org/install/mobile) kullanıcılarıyla paylaşın. Böylece onlar da seçtiğiniz siteleri sınayabilirler!", + "Error.Empty": "Boş olamaz", + "Error.UrlFormat": "Lütfen \"https://ooni.org/post/\" gibi geçerli bir adres yazın", + "Home.About": "OONI Run, site engellemelerini bulmayı amaçlayan topluluk çabalarını destekler. İstediğiniz siteleri sınamak için bir OONI Run bağlantısı oluşturun!", + "Home.Box1.Title": "Hızlı yanıt", + "Home.Box1.Description": "Ülkenizde yaklaşan seçimler mi var? Sansür olayları dünya çapında seçimler, protestolar ve diğer siyasi olaylar sırasında sık sık [ortaya çıkar](https://ooni.org/reports/). Siyasi olaylar sırasında belirli sitelerin engellenebileceğinden şüpheleniyorsanız, sınamalar için bir OONI Run bağlantısı oluşturmak üzere bu platformu kullanın. Engellemelerin kanıtını toplamak için bu bağlantıyı [OONI Probe](https://ooni.org/install/mobile) kullanıcılarıyla paylaşın!", + "Home.Box2.Title": "Sansür araştırması", + "Home.Box2.Description": "Belirli sitelerin engellenmesini araştırmakla mı ilgileniyorsunuz? İlgilendiğiniz sitelerin sınanması için bir OONI Run bağlantısı oluşturmak üzere bu platformu kullanın. Bu bağlantıyı farklı ülkelerdeki [OONI Probe](https://ooni.org/install/mobile) kullanıcılarıyla paylaşın! [Topluluk üyelerinin araştırma çabalarının bir parçası olarak OONI Run uygulamasını nasıl kullandıklarını](https://ooni.org/support/ooni-censorship-measurement-campaigns) öğrenin.", + "Home.Box3.Title": "Sitenizi izleyin", + "Home.Box3.Description": "Sitenizin dünya çapında engellenmesini izlemekle ilgileniyor musunuz? Sitenizin [OONI Probe](https://ooni.org/install/) kullanıcıları tarafından sınanmasını sağlayarak, engellemenin teknik olarak nasıl uygulandığını ve hangi ağlarda engellendiğini gösteren [gerçek zamanlı açık veri](https://ooni.org/data/) elde edersiniz. Sitenizin sınanması için bir OONI Run bağlantısı oluşturmak üzere bu platformu kullanın!", + "Home.Button.CreateRunLink": "OONI Run bağlantısı oluştur", + "Home.Button.Login": "OONI Run bağlantısı oluşturmak için oturum açın", + "Nettest.DeprecationWarning": "OONI Run bağlantılarının bu sürümü 1 Ocak 2025 tarihinde kullanımdan kaldırılacak.\nSon sürüme (OONI Run v2) geçmek için oturum açın ve yeni bağlantılar oluşturun.", + "List.Title": "OONI Run bağlantılarım", + "List.Empty": "Herhangi bir OONI Run bağlantınız yok", + "List.Button.Create": "İlk bağlantınızı oluşturun", + "LinkView.Error.DoesNotExist": "OONI Run bağlantısı bulunamadı", + "LinkView.Error.ServerError": "Bir sorun çıktı.", + "TestListForm.Validation.Required": "Zorunlu alan", + "TestListForm.Validation.Min2": "En az 2 karakter uzunluğunda olmalıdır", + "TestListForm.Validation.Max50": "En fazla 50 karakter uzunluğunda olmalıdır", + "TestListForm.Validation.FutureDate": "Geçerlilik sonu tarihi gelecekte olmalıdır.", + "TestListForm.Validation.Min1Url": "En az 1 adres olması zorunludur.", + "TestListForm.MigrationModalLink": "Eski OONI Run v1 bağlantılarınız mı var? Bu tür bağlantılardan adresler eklemek için buraya tıklayın.", + "TestListForm.Label.Color": "Renk", + "TestListForm.Label.TestListName": "OONI Run bağlantınızın başlığı", + "TestListForm.Label.ShortDescription": "Kısa açıklama", + "TestListForm.Label.Description": "Açıklama", + "TestListForm.Label.Email": "Ekleyenin e-posta adresi", + "TestListForm.Label.ExpirationDate": "Son geçerlilik tarihi", + "TestListForm.Label.Icon": "Simge", + "TestListForm.OptionsFields.Key": "Anahtar", + "TestListForm.OptionsFields.Value": "Değer", + "TestListForm.OptionsFields.AddOption": "Seçenek ekle", + "TestListForm.NettestFields.Urls": "Adresler", + "TestListForm.Intl.Language": "Dil", + "TestListForm.Intl.Translation": "Çeviri", + "TestListForm.Intl.AddTranslation": "Çeviri ekle", + "TestListForm.Inputs.AddInput": "Adres ekle", + "TestListForm.Icon.Select": "Simge seçin", + "TestListForm.Icon.Replace": "Simgeyi değiştir", + "TestListForm.AdminNettests.Tests": "Sınamalar", + "TestListForm.AdminNettests.AddTest": "Sınama ekle", + "TestListForm.AdminNettests.DeleteTest": "Sınamayı sil", + "TestListForm.AdminNettests.EnableManualRun": "El ile çalıştırılabilsin", + "TestListForm.AdminNettests.EnableBackgroundRun": "Arka planda çalıştırılsın", + "TestListForm.AdminNettests.BackendOptions": "Arka plan seçenekleri", + "TestListForm.AdminNettests.Options": "Seçenekler", + "MigrationModal.RunLink": "OONI Run bağlantısı", + "MigrationModal.AddUrls": "Adresler ekle", + "General.Cancel": "İptal", + "General.Edit": "Düzenle", + "RevisionView.TopNotice": "{date} tarihindeki sürüm. Geçerli bağlantıya dön.", + "RevisionView.LinkInfo": "Bağlantı bilgileri", + "DescriptorDetails.CreatedByOn": "{author} tarafından, {date} tarihinde oluşturuldu.", + "DescriptorDetails.CreatedOn": "{date} tarihinde oluşturuldu.", + "DescriptorDetails.LastUpdated": "En son {date} tarihinde güncellendi.", + "DescriptorDetails.ExpirationDate": "Geçerlilik sonu tarihi {date}.", + "DescriptorDetails.ExpirationNotice": "Bağlantınızın geçerlilik süresi {date} tarihinde dolacak", + "DescriptorDetails.UpdateButton": "Şimdi güncelle", + "DescriptorView.LinkContent": "Bağlantı içeriği", + "Revisions.Title": "Önceki sürümler", + "ArchivedTag.Expired": "SÜRESİ GEÇMİŞ", + "DescriptorCard.CreatedBy": "{author} tarafından oluşturuldu", + "DescriptorCard.Updated": "Güncellenme {date}", + "DescriptorCard.Expired": "Süresi doldu {date}", + "DescriptorCard.Expiring": "Süresi doluyor {date}", + "Navbar.Login": "Oturum aç", + "Navbar.Logout": "Oturumu kapat", + "Navbar.List": "OONI Run bağlantılarım", + "Navbar.Create": "OONI Run bağlantısı oluştur", + "Login.Title": "Lütfen ilerlemek için oturum açın", + "Login.EnterEmail": "E-posta adresinizi ekleyin ve oturum açmak için e-postanıza gönderilen bağlantıya tıklayın.\n\nBir OONI Run bağlantısı oluşturduğunuzda, e-posta adresinizi kaydedeceğiz. Bu, OONI Run bağlantınızı alan OONI Probe kullanıcılarının bağlantıya güvenmesini sağlar.", + "Login.Submitted": "Oturum açma isteğiniz gönderildi. Etkinleştirmek ve hesabınızda oturum açma bağlantısını görmek için e-postanızı denetleyin.", + "Login.LoggingIn": "Oturum açılıyor...", + "Login.Failure": "Yeniden oturum açmayı dene", + "Login.Button": "Bana bağlantıyı gönder", + "Login.Success": "Oturum açıldı. Yönlendiriliyor...", + "Footer.Text.Slogan": "Tüm Dünya'da İnternet sansürünü ölçen küresel topluluk.", + "Footer.Heading.About": "Hakkında", + "Footer.Heading.OONIProbe": "OONI Probe", + "Footer.Heading.Updates": "Güncellemeler", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "Veri işleme ilkesi", + "Footer.Link.DataLicense": "Veri lisansı", + "Footer.Link.Contact": "İletişim", + "Footer.Link.Probe": "Kur", + "Footer.Link.Tests": "Sınamalar", + "Footer.Link.Code": "Kaynak kodu", + "Footer.Link.API": "API", + "Footer.Link.Blog": "Günlük", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "E-posta listesi", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "İçerikler Creative Commons lisansı koşulları altında yayınlanıyor.", + "Tests.WebConnectivity.Name": "Site bağlantısı sınaması", + "Tests.Telegram.Name": "Telegram sınaması", + "Tests.Facebook.Name": "Facebook Messenger sınaması", + "Tests.WhatsApp.Name": "WhatsApp sınaması", + "Tests.Signal.Name": "Signal sınaması", + "Tests.HTTPInvalidReqLine.Name": "HTTP geçersiz istek satırı sınaması", + "Tests.HTTPHeaderManipulation.Name": "HTTP üst bilgi değişikliği sınaması", + "Tests.NDT.Name": "NDT hız sınaması", + "Tests.Dash.Name": "DASH görüntü akışı sınaması", + "Tests.TorVanilla.Name": "Tor (Vanilla) sınaması", + "Tests.BridgeReachability.Name": "Tor körpüsü erişilebilirlik sınaması", + "Tests.TCPConnect.Name": "TCP bağlantı sınaması", + "Tests.DNSConsistency.Name": "DNS tutarlılığı sınaması", + "Tests.HTTPRequests.Name": "HTTP istekleri sınaması", + "Tests.Psiphon.Name": "Psiphon sınaması", + "Tests.Tor.Name": "Tor sınaması", + "Tests.RiseupVPN.Name": "RiseupVPN sınaması", + "Tests.TorSnowflake.Name": "Tor Snowflake sınaması", + "Tests.DNSCheck.Name": "DNS denetimi", + "Tests.StunReachability.Name": "STUN erişilebilirliği", + "Tests.URLGetter.Name": "Adres getirici", + "Tests.ProbeWeb.Name": "OONI Probe sitesi", + "DateRange.OneWeek": "Bir hafta", + "DateRange.OneMonth": "Bir ay", + "DateRange.SixMonths": "Altı ay", + "DateRange.Apply": "Uygula", + "DateRange.Cancel": "İptal" +} \ No newline at end of file diff --git a/public/static/lang/translations.js b/public/static/lang/translations.js deleted file mode 100644 index 9a2f383..0000000 --- a/public/static/lang/translations.js +++ /dev/null @@ -1,306 +0,0 @@ -window.OONITranslations = { - de: { - "Hero.SubTitle": "Koordinierung der Zensurtests für Websites", - "Title.URLs": "URLs", - "Button.AddUrl": "URL hinzufügen", - "Button.Generate": "Erzeuge", - "Share.Twitter.Tweet": "Führe OONI Probe aus, um auf Zensur zu testen!", - "Home.Heading.TestName": "Name testen", - "Sidebar.WebConnectivity.Title": "Internetzensur", - "Sidebar.Performance.Title": "Geschwindigkeit & Leistung", - "Sidebar.Middleboxes.Title": "Middleboxen", - "Modal.Heading.LinkReady": "Dein Link ist bereit!", - "Modal.Heading.ShareIt": "Teile das auf Social Media", - "Modal.Button.Link": "Link", - "Modal.Heading.ShareThisURL": - "Teile diesen Link mit Nutzern der OONI Probe Mobile App", - "Modal.Heading.EmbedThisCode": - "Oder bette diesen Code auf deiner Website ein", - "Modal.Button.Done": "Erledigt", - "Nettest.Heading.HaveMobileApp": - "Du hast bereits die OONI Probe Mobile App", - "Nettest.Text.HaveMobileApp": - "Tippe auf Ausführen und öffne diesen Link mit deiner OONI Probe Mobile App, um den Test zu starten.", - "Nettest.Button.Run": "Ausführen", - "Nettest.Heading.InstallApp": "Installiere die OONI Probe Mobile App", - "Nettest.Text.InstallApp": - "Derzeit funktionieren die OONI Run Links nur mit der OONI Probe Mobile App.", - "Nettest.Button.Install": "Installiere", - "Notice.Paste": - "Hinweis: Wenn du eine lange Liste von URLs hast, die du hinzufügen möchtest, kannst du sie kopieren und in eines der Felder unten einfügen.", - "WhatCanYouDoText.WebCensorship": - 'Füge unten Websites hinzu, die du auf Zensur testen möchtest. Klicke auf "Erzeugen", um einen Link zu erstellen, der auf diesen Websites basiert. Teile diesen Link mit den Nutzern der OONI Probe Mobile App, damit diese die Websites ihrer Wahl testen können!', - }, - en: { - "Hero.SubTitle": "Coordinate website censorship testing", - "Title.URLs": "URLs", - "Button.AddUrl": "Add URL", - "Button.Generate": "Generate", - "Share.Twitter.Tweet": "Run OONI Probe to test for censorship!", - "Home.Heading.TestName": "Test Name", - "Sidebar.WebConnectivity.Title": "Internet Censorship", - "Sidebar.Performance.Title": "Speed & Performance", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "Your link is ready!", - "Modal.Heading.ShareIt": "Share it on social media", - "Modal.Button.Link": "Link", - "Modal.Heading.ShareThisURL": - "Share this link with OONI Probe mobile app users", - "Modal.Heading.EmbedThisCode": "Or embed this code on your website", - "Modal.Button.Done": "Done", - "Nettest.Heading.HaveMobileApp": - "You already have the OONI Probe mobile app", - "Nettest.Text.HaveMobileApp": - "Tap Run and open this link with your OONI Probe mobile app to start the test.", - "Nettest.Button.Run": "Run", - "Nettest.Heading.InstallApp": "Install the OONI Probe mobile app", - "Nettest.Text.InstallApp": - "Currently, OONI Run links only work with the OONI Probe mobile app.", - "Nettest.Button.Install": "Install", - "Notice.Paste": - "Note: If you have a long list of URLs to add, you can copy them and paste into one of the boxes below.", - "WhatCanYouDoText.WebCensorship": - 'Add websites below that you would like to test for censorship. Click "Generate" to create a link based on those websites. Share that link with OONI Probe mobile app users so that they can test the websites of your choice!', - }, - es: { - "Hero.SubTitle": "Coordinar las pruebas de censura de sitio web", - "Title.URLs": "URLs", - "Button.AddUrl": "Agregar URL", - "Button.Generate": "Generar", - "Share.Twitter.Tweet": "¡Ejecuta OONI Probe para probar la censura!", - "Home.Heading.TestName": "Nombre de la prueba", - "Sidebar.WebConnectivity.Title": "Censura en Internet", - "Sidebar.Performance.Title": "Velocidad y Rendimiento", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "¡Tu enlace está listo!", - "Modal.Heading.ShareIt": "Compártelo en las redes sociales", - "Modal.Button.Link": "Enlace", - "Modal.Heading.ShareThisURL": - "Comparte este enlace con las usuarias de la aplicación móvil OONI Probe.", - "Modal.Heading.EmbedThisCode": "O inserta este código en tu sitio web", - "Modal.Button.Done": "Hecho", - "Nettest.Heading.HaveMobileApp": "Ya tienes la aplicación móvil OONI Probe", - "Nettest.Text.HaveMobileApp": - "Toca Ejecutar y abre este enlace con tu aplicación móvil OONI Probe para comenzar la prueba.", - "Nettest.Button.Run": "Ejecutar", - "Nettest.Heading.InstallApp": "Instala la aplicación móvil OONI Probe", - "Nettest.Text.InstallApp": - "Actualmente, los enlaces OONI Run solo funcionan con la aplicación móvil OONI Probe.", - "Nettest.Button.Install": "Instalar", - "Notice.Paste": - "Nota: si tienes una lista larga de URLs para agregar, puedes copiarlas y pegarlas en uno de los cuadros a continuación.", - "WhatCanYouDoText.WebCensorship": - 'Agrega sitios web a continuación que te gustaría probar para la censura. Haz clic en "Generar" para crear un enlace basado en esos sitios web. ¡Comparte ese enlace con los usuarios de la aplicación móvil OONI Probe para que puedan probar los sitios web de tu elección!', - }, - fa: { - "Hero.SubTitle": "هماهنگ کردن آزمایش سانسور وب‌سایت", - "Title.URLs": "نشانی‌های اینترنتی", - "Button.AddUrl": "افزودن نشانی اینترنتی", - "Button.Generate": "تولید کردن", - "Share.Twitter.Tweet": "برای آزمایش سانسور، OONI Probe را اجرا کنید!", - "Home.Heading.TestName": "نام آزمایش", - "Sidebar.WebConnectivity.Title": "سانسور اینترنت", - "Sidebar.Performance.Title": "سرعت و عملکرد", - "Sidebar.Middleboxes.Title": "جعبه‌های میانی", - "Modal.Heading.LinkReady": "پیوند شما آماده است!", - "Modal.Heading.ShareIt": "آن را در شبکه‌های اجتماعی به اشتراک بگذارید", - "Modal.Button.Link": "پیوند", - "Modal.Heading.ShareThisURL": - "این پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید", - "Modal.Heading.EmbedThisCode": "یا این کد را در وب‌سایت خود قرار دهید", - "Modal.Button.Done": "انجام شد", - "Nettest.Heading.HaveMobileApp": - "شما در حال حاضر برنامه تلفن همراه OONI Probe را دارید", - "Nettest.Text.HaveMobileApp": - "روی «اجرا» ضربه بزنید و این پیوند را با برنامه تلفن همراه OONI Probe خود برای شروع آزمایش باز کنید.", - "Nettest.Button.Run": "اجرا", - "Nettest.Heading.InstallApp": "برنامه تلفن همراه OONI Probe را نصب کنید", - "Nettest.Text.InstallApp": - "در حال حاضر، پیوندهای OONI Run فقط با برنامه تلفن همراهOONI Probe کار می‌کنند.", - "Nettest.Button.Install": "نصب", - "Notice.Paste": - "توجه: اگر فهرست طولانی از نشانی‌های اینترنتی برای افزودن دارید، می‌توانید آنها را کپی کرده و در یکی از کادرهای زیر جایگذاری کنید.", - "WhatCanYouDoText.WebCensorship": - 'وب‌سایت‌هایی را در زیر اضافه کنید که می‌خواهید برای سانسور آزمایش کنید. برای ایجاد پیوند بر اساس آن وب‌سایت‌ها، روی "تولید کردن" کلیک کنید. آن پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید تا بتوانند وب‌سایت‌های مورد نظر شما را آزمایش کنند!', - }, - "pt-br": { - "Hero.SubTitle": "Coordenar testes de censura de websites", - "Title.URLs": "URLs", - "Button.AddUrl": "Adicionar URL", - "Button.Generate": "Gerar", - "Share.Twitter.Tweet": "Rode o OONI Probe para testes de censura!", - "Home.Heading.TestName": "Testar nome", - "Sidebar.WebConnectivity.Title": "Censura na internet", - "Sidebar.Performance.Title": "Velocidade e desempenho", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "Seu link está pronto!", - "Modal.Heading.ShareIt": "Compartilhe nas redes sociais", - "Modal.Button.Link": "Link", - "Modal.Heading.ShareThisURL": - "Compartilhe este link com usuários do aplicativo móvel OONI Probe", - "Modal.Heading.EmbedThisCode": "Ou incorpore este código em seu site", - "Modal.Button.Done": "Feito", - "Nettest.Heading.HaveMobileApp": - "Você já tem o aplicativo móvel OONI Probe", - "Nettest.Text.HaveMobileApp": - "Toque em Executar e abra este link com seu aplicativo móvel OONI Probe para iniciar o teste", - "Nettest.Button.Run": "Rodar", - "Nettest.Heading.InstallApp": - "Instalar o OONI Probe para aplicativos móveis", - "Nettest.Text.InstallApp": - "Atualmente, os links OONI Run funcionam apenas com o aplicativo móvel OONI Probe", - "Nettest.Button.Install": "Instalar", - "Notice.Paste": - "Observação: se você tiver uma longa lista de URLs para adicionar, poderá copiá-los e colá-los em uma das caixas abaixo", - "WhatCanYouDoText.WebCensorship": - 'Adicione os sites abaixo que você gostaria de testar quanto à censura. Clique em "Gerar" para criar um link com base nesses sites. Compartilhe esse link com os usuários do aplicativo móvel OONI Probe para que eles possam testar os sites de sua escolha', - }, - ru: { - "Hero.SubTitle": "Координируйте мониторинг интернет-цензуры", - "Title.URLs": "URLs", - "Button.AddUrl": "Добавить ссылку", - "Button.Generate": "Создать ссылку", - "Share.Twitter.Tweet": "Запустить OONI Probe, чтобы начать тестирование", - "Home.Heading.TestName": "Название теста", - "Sidebar.WebConnectivity.Title": "Интернет-цензура", - "Sidebar.Performance.Title": "Скорость и производительность", - "Sidebar.Middleboxes.Title": "ТСПУ (middleboxes)", - "Modal.Heading.LinkReady": "Ваша ссылка готова!", - "Modal.Heading.ShareIt": "Поделиться в социальных сетях", - "Modal.Button.Link": "Ссылка", - "Modal.Heading.ShareThisURL": - "Поделиться ссылкой с пользователями мобильного приложения OONI Probe", - "Modal.Heading.EmbedThisCode": "Или вставить этот код на ваш сайт", - "Modal.Button.Done": "Сделано", - "Nettest.Heading.HaveMobileApp": - "У вас уже установлено приложение OONI Probe", - "Nettest.Text.HaveMobileApp": - "Нажмите «Запустить» и откройте эту ссылку с помощью мобильного приложения OONI Probe, чтобы начать тестирование.", - "Nettest.Button.Run": "Запустить", - "Nettest.Heading.InstallApp": "Установить мобильное приложение OONI Probe", - "Nettest.Text.InstallApp": - "На данный момент ссылки OONI Run работают только с мобильным приложением OONI Probe", - "Nettest.Button.Install": "Установить", - "Notice.Paste": - "Внимание: Если список ссылок, который вы хотите добавить, очень длинный, то вы можете скопировать весь список и вставить в одну из строк ниже. ", - "WhatCanYouDoText.WebCensorship": - "В строки ниже можно добавлять сайты, которые вы хотите протестировать на присутствие цензуры. Нажмите «Создать», чтобы сгенерировать ссылку для тестирования, основанную на вашем списке сайтов. Поделитесь этой ссылкой с другими пользователями мобильного приложения OONI Probe, чтобы они тоже смогли протестировать ваш список сайтов!", - }, - th: { - "Hero.SubTitle": "ช่วยกันทดสอบการปิดกั้นเว็บไซต์", - "Title.URLs": "URL", - "Button.AddUrl": "เพิ่ม URL", - "Button.Generate": "สร้าง", - "Share.Twitter.Tweet": "ใช้ OONI Probe เพื่อตรวจหาการปิดกั้น!", - "Home.Heading.TestName": "ชื่อการทดสอบ", - "Sidebar.WebConnectivity.Title": "การปิดกั้นอินเทอร์เน็ต", - "Sidebar.Performance.Title": "ความเร็วและประสิทธิภาพ", - "Sidebar.Middleboxes.Title": "ตัวกลาง", - "Modal.Heading.LinkReady": "ลิงก์ของคุณพร้อมแล้ว!", - "Modal.Heading.ShareIt": "แบ่งปันมันบนสื่อสังคม", - "Modal.Button.Link": "ลิงก์", - "Modal.Heading.ShareThisURL": "แบ่งปันลิงก์นี้กับผู้ใช้แอป OONI Probe บนอุปกรณ์พกพา", - "Modal.Heading.EmbedThisCode": "หรือฝังโค้ดนี้ในเว็บไซต์ของคุณ", - "Modal.Button.Done": "เสร็จสิ้น", - "Nettest.Heading.HaveMobileApp": "คุณมีแอป OONI Probe บนอุปกรณ์พกพาอยู่แล้ว", - "Nettest.Text.HaveMobileApp": - "แตะ 'เริ่มทดสอบ' และเปิดลิงก์นี้ด้วยแอป OONI Probe บนอุปกรณ์พกพาของคุณ เพื่อเริ่มการทดสอบ", - "Nettest.Button.Run": "เริ่มทดสอบ", - "Nettest.Heading.InstallApp": "ติดตั้งแอป OONI Probe บนอุปกรณ์พกพา", - "Nettest.Text.InstallApp": - "ปัจจุบัน ลิงก์ OONI Run ใช้ได้เฉพาะกับแอป OONI Probe บนอุปกรณ์พกพาเท่านั้น", - "Nettest.Button.Install": "ติดตั้ง", - "Notice.Paste": - "หมายเหตุ: ถ้ารายการ URL ที่จะเพิ่มของคุณยาวมากๆ คุณสามารถทำสำเนามันและวางลงในกล่องใดก็ได้ด้านล่างนี้", - "WhatCanYouDoText.WebCensorship": - "เพิ่มเว็บไซต์ที่คุณต้องการทดสอบหาการปิดกั้นที่ด้านล่างนี้ คลิก 'สร้าง' เพื่อสร้างลิงก์จากบรรดาเว็บไซต์ดังกล่าว แบ่งปันลิงก์นั้นให้กับผู้ใช้ OONI Probe บนอุปกรณ์พกพาคนอื่นๆ พวกเขาจะได้สามารถทดสอบบรรดาเว็บไซต์ที่คุณเลือกมาได้!", - }, - tr: { - "Hero.SubTitle": "Site engelleme sınaması düzenleyin", - "Title.URLs": "Adresler", - "Button.AddUrl": "Adres ekle", - "Button.Generate": "Oluştur", - "Share.Twitter.Tweet": "Engellemeyi sınamak için OONI Probe çalıştırın!", - "Home.Heading.TestName": "Sınama adı", - "Sidebar.WebConnectivity.Title": "İnternet sansürü", - "Sidebar.Performance.Title": "Hız ve başarım", - "Sidebar.Middleboxes.Title": "Ara kutular", - "Modal.Heading.LinkReady": "Bağlantınız hazır!", - "Modal.Heading.ShareIt": "Sosyal ağlarda paylaş", - "Modal.Button.Link": "Bağlantı", - "Modal.Heading.ShareThisURL": - "Bu bağlantıyı OONI Probe mobil uygulama kullanıcıları ile paylaşın", - "Modal.Heading.EmbedThisCode": "ya da bu kodu sitenize ekleyin", - "Modal.Button.Done": "Tamam", - "Nettest.Heading.HaveMobileApp": - "OONI Probe mobil uygulamasına zaten sahipsiniz", - "Nettest.Text.HaveMobileApp": - "Sınamayı başlatmak için Çalıştır üzerine dokunup bu bağlantıyı OONI Probe mobil uygulaması ile açın.", - "Nettest.Button.Run": "Çalıştır", - "Nettest.Heading.InstallApp": "OONI Probe mobil uygulamasını kur", - "Nettest.Text.InstallApp": - "Şu anda OONI Run bağlantıları yalnızca OONI Probe mobil uygulaması ile çalışır.", - "Nettest.Button.Install": "Kur", - "Notice.Paste": - "Not: Eklenecek uzun bir adres listeniz varsa, bunları kopyalayıp aşağıdaki kutulardan birine yapıştırabilirsiniz.", - "WhatCanYouDoText.WebCensorship": - 'Sansür durumunu sınamak istediğiniz siteleri aşağıya ekleyin. Bu siteleri temel alan bir bağlantı oluşturmak için "Oluştur" düğmesine tıklayın. Seçtiğiniz siteleri sınayabilmeleri için bu bağlantıyı OONI Probe mobil uygulaması kullanıcılarıyla paylaşın!', - }, - "zh-cn": { - "Hero.SubTitle": "协作测试针对网站的审查制度", - "Title.URLs": "网址", - "Button.AddUrl": "添加网址", - "Button.Generate": "生成", - "Share.Twitter.Tweet": "运行 OONI Probe 测试审查!", - "Home.Heading.TestName": "测试名称", - "Sidebar.WebConnectivity.Title": "网络审查", - "Sidebar.Performance.Title": "网速和性能", - "Sidebar.Middleboxes.Title": "中间盒", - "Modal.Heading.LinkReady": "您的链接已就绪!", - "Modal.Heading.ShareIt": "分享到社交媒体", - "Modal.Button.Link": "链接", - "Modal.Heading.ShareThisURL": "向 OONI Probe 移动应用的用户分享此链接", - "Modal.Heading.EmbedThisCode": "或在您的网站中嵌入如下代码", - "Modal.Button.Done": "完成", - "Nettest.Heading.HaveMobileApp": "已安装 OONI Probe 移动应用", - "Nettest.Text.HaveMobileApp": - "点按运行,并在 OONI Probe 移动应用中打开链接进行测试。", - "Nettest.Button.Run": "运行", - "Nettest.Heading.InstallApp": "安装 OONI Probe 移动应用", - "Nettest.Text.InstallApp": - "目前 OONI Run 链接仅限在 OONI Probe 移动应用中使用。", - "Nettest.Button.Install": "安装", - "Notice.Paste": - "请注意:若要添加较长的网址列表,您可以将这些网址复制并粘贴到下方的一个输入框中。", - "WhatCanYouDoText.WebCensorship": - "在下方添加要测试审查的网站。点击\\“生成\\”创建基于所选网站的链接。分享此链接给 OONI Probe 移动应用用户,以便他们对所选网站进行测试!", - }, - "zh-tw": { - "Hero.SubTitle": "協作型網站審查測量", - "Title.URLs": "網址", - "Button.AddUrl": "新增網址 ", - "Button.Generate": "生成", - "Share.Twitter.Tweet": "執行 OONI Probe 來測量審查狀況", - "Home.Heading.TestName": "測試名稱", - "Sidebar.WebConnectivity.Title": "網際網路審查", - "Sidebar.Performance.Title": "速度 & 效能", - "Sidebar.Middleboxes.Title": "中間盒", - "Modal.Heading.LinkReady": "您的鏈接已就緒!", - "Modal.Heading.ShareIt": "分享到社群媒體", - "Modal.Button.Link": "鏈接", - "Modal.Heading.ShareThisURL": "分享此鏈接給 OONI Probe 行動用戶", - "Modal.Heading.EmbedThisCode": "或將此代碼篏入您的網站", - "Modal.Button.Done": "完成", - "Nettest.Heading.HaveMobileApp": "您已安裝了 OONI Probe 行動應用", - "Nettest.Text.HaveMobileApp": - "輕觸執行並利用 OONI Probe 開啟鏈接以便啟動測量", - "Nettest.Button.Run": "執行", - "Nettest.Heading.InstallApp": "安裝 OONI Probe 行動應用", - "Nettest.Text.InstallApp": - "目前 OONI Run 鏈接僅限於 OONI Probe 行動應用使用", - "Nettest.Button.Install": "安裝", - "Notice.Paste": "備註:如果有一長串網址清單待加入,可以下方方框來複製貼上", - "WhatCanYouDoText.WebCensorship": - '在下方新增測試是否遭審之網址,點擊"\\生成" 來建立該網站的鏈接,透過 OONI Probe 行動應用來分享該鏈接,讓其它用戶可以測試您所選的網站。', - }, -} diff --git a/public/static/lang/vi.json b/public/static/lang/vi.json new file mode 100644 index 0000000..c12f44b --- /dev/null +++ b/public/static/lang/vi.json @@ -0,0 +1,27 @@ +{ + "Hero.SubTitle": "Phối hợp kiểm tra kiểm duyệt trang web", + "Title.URLs": "URLs", + "Button.AddUrl": "Thêm URL", + "Button.Generate": "Tạo ra", + "Share.Twitter.Tweet": "Chạy OONI Probe để phát hiện kiểm duyệt!", + "Home.Heading.TestName": "Tên Kiểm Tra", + "Sidebar.WebConnectivity.Title": "Kiểm Duyệt Internet", + "Sidebar.Performance.Title": "Tốc độ & Hiệu suất", + "Sidebar.Middleboxes.Title": "Middleboxes", + "Modal.Heading.LinkReady": "Liên kết đã sẵn sàng", + "Modal.Heading.ShareIt": "Chia sẻ trên mạng xã hội", + "Modal.Button.Link": "Liên kết", + "Modal.Heading.ShareThisURL": "Chia sẻ liên kết này với người dùng ứng dụng di động OONI Probe ", + "Modal.Heading.EmbedThisCode": "Hoặc cài mã này trong trang web của bạn", + "Modal.Button.Done": "Xong", + "Nettest.Heading.HaveMobileApp": "Bạn đã có ứng dụng di động OONI Probe", + "Nettest.Text.HaveMobileApp": "Nhấn Chạy và mở liên kết này ra bằng ứng dụng di động OONI Probe để bắt đầu kiểm tra.", + "Nettest.Button.Run": "Chạy", + "Nettest.Heading.InstallApp": "Cài đặt ứng dụng di động OONI Probe", + "Nettest.Text.InstallApp": "Hiện thời, liên kết OONI Run chỉ chạy với ứng dụng di động OONI Probe.", + "Nettest.Button.Install": "Cài đặt", + "Notice.Paste": "Ghi chú: nếu bạn có một danh sách nhiều URL để thêm vào, bạn có thể sao chép và dán vào hộp dưới đây.", + "WhatCanYouDoText.WebCensorship": "Thêm trang web nào bạn muốn kiểm tra vào bên dưới. Bấm \"Tạo ra\" để tạo ra một liên kết dựa vào trang web đó. Chia sẻ liên kết đó với người dùng ứng dụng di động OONI Probe khác để họ có thể kiểm tra các trang web bạn chọn!", + "Error.Empty": "Không thể để trống", + "Error.UrlFormat": "Nên có dạng URL hợp lệ, ví dụ như \"https://ooni.org/post/\"" +} \ No newline at end of file diff --git a/public/static/lang/zh-TW.json b/public/static/lang/zh-TW.json index 01d1f43..821831d 100644 --- a/public/static/lang/zh-TW.json +++ b/public/static/lang/zh-TW.json @@ -21,5 +21,5 @@ "Nettest.Text.InstallApp": "目前 OONI Run 鏈接僅限於 OONI Probe 行動應用使用", "Nettest.Button.Install": "安裝", "Notice.Paste": "備註:如果有一長串網址清單待加入,可以下方方框來複製貼上", - "WhatCanYouDoText.WebCensorship": "在下方新增測試是否遭審之網址,點擊\"生成\" 來建立該網站的鏈接,透過 OONI Probe 行動應用來分享該鏈接,讓其它用戶可以測試您所選的網站。" -} + "WhatCanYouDoText.WebCensorship": "在下方新增測試是否遭審之網址,點擊\"\\生成\\\" 來建立該網站的鏈接,透過 OONI Probe 行動應用來分享該鏈接,讓其它用戶可以測試您所選的網站。" +} \ No newline at end of file diff --git a/public/static/lang/zh-cn.json b/public/static/lang/zh-cn.json index 8d9574e..abfe90f 100644 --- a/public/static/lang/zh-cn.json +++ b/public/static/lang/zh-cn.json @@ -1,25 +1,143 @@ { - "Hero.SubTitle": "协作测试针对网站的审查制度", - "Title.URLs": "网址", - "Button.AddUrl": "添加网址", - "Button.Generate": "生成", - "Share.Twitter.Tweet": "运行 OONI Probe 测试审查!", + "Hero.SubTitle": "社区协同合作,检测网站屏蔽", + "Button.Generate": "创建链接", + "Button.Update": "更新", + "Share.Twitter.Button": "发推", + "Share.Twitter.Tweet": "运行 OONI Probe 检测网站审查!", "Home.Heading.TestName": "测试名称", - "Sidebar.WebConnectivity.Title": "网络审查", - "Sidebar.Performance.Title": "网速和性能", - "Sidebar.Middleboxes.Title": "中间盒", - "Modal.Heading.LinkReady": "您的链接已就绪!", - "Modal.Heading.ShareIt": "分享到社交媒体", - "Modal.Button.Link": "链接", - "Modal.Heading.ShareThisURL": "向 OONI Probe 移动应用的用户分享此链接", - "Modal.Heading.EmbedThisCode": "或在您的网站中嵌入如下代码", - "Modal.Button.Done": "完成", - "Nettest.Heading.HaveMobileApp": "已安装 OONI Probe 移动应用", - "Nettest.Text.HaveMobileApp": "点按运行,并在 OONI Probe 移动应用中打开链接进行测试。", - "Nettest.Button.Run": "运行", - "Nettest.Heading.InstallApp": "安装 OONI Probe 移动应用", - "Nettest.Text.InstallApp": "目前 OONI Run 链接仅限在 OONI Probe 移动应用中使用。", + "Modal.Button.Link": "在 OONI Probe 中打开链接", + "Modal.Heading.ShareThisURL": "分享该链接", + "Nettest.Heading.HaveMobileApp": "是否已安装 OONI Probe Mobile?", + "Nettest.Text.HaveMobileApp": "请点击下方按钮,在 OONI Probe 中安装 OONI Run。", + "Nettest.Button.Run": "在应用中运行", + "Nettest.Heading.InstallApp": "没有 OONI Probe 应用?", + "Nettest.Text.InstallApp": "从应用商店安装 OONI Probe Mobile,再次点击 OONI Run 链接。", "Nettest.Button.Install": "安装", - "Notice.Paste": "请注意:若要添加较长的网址列表,您可以将这些网址复制并粘贴到下方的一个输入框中。", - "WhatCanYouDoText.WebCensorship": "在下方添加要测试审查的网站。点击\\“生成\\”创建基于所选网站的链接。分享此链接给 OONI Probe 移动应用用户,以便他们对所选网站进行测试!" -} + "Nettest.DownloadAndroid": "在 Android 上安装 OONI Probe", + "Nettest.DownloadIOS": "在 iOS 上安装 OONI Probe", + "Nettest.DownloadFdroid": "从 F-Droid 安装 OONI Probe", + "Notice.Paste": "注意:如果需添加一长列的 URL 地址,可将其复制粘贴至下方文本框中。", + "WhatCanYouDoText.WebCensorship": "下方可创建链接与社区分享,以测试网站审查。\n\n如需创建链接,请在下方添加需测试审查的 URL。为了便于社区进行测试,请已定义你的链接,添加标题和描述。完成之后,请点击“创建链接”按钮,并将生成链接与 [OONI Probe mobile 应用](https://ooni.org/install/mobile)用户分享,以便对你所选的网站进行测试!", + "Error.Empty": "不能为空", + "Error.UrlFormat": "请输入有效 URL,如:https://ooni.org/post/", + "Home.About": "OONI Run 通过社区共同努力来检测网站屏蔽。创建 OONI Run 链接测试你所选的网站!", + "Home.Box1.Title": "快速响应", + "Home.Box1.Description": "你的国家是否即将举行大选?在世界各地的选举、抗议和其他政治活动期间,常常[涌现](https://ooni.org/reports/)审查事件。如果你怀疑某些网站在政治活动期间可能被屏蔽,可通过该平台创建 OONI Run 链接来进行测试。与 [OONI Probe](https://ooni.org/install/mobile) 用户分享该链接,收集屏蔽证据!", + "Home.Box2.Title": "审查研究", + "Home.Box2.Description": "对特定网站屏蔽的研究有兴趣?使用该平台创建 OONI Run 链接,对你关心的网站进行测试。将该链接分享给来自不同国家的 [OONI Probe](https://ooni.org/install/mobile) 用户!学习[社区成员如何通过 OONI Run 进行他们的研究活动](https://ooni.org/support/ooni-censorship-measurement-campaigns)。", + "Home.Box3.Title": "监测你的网站", + "Home.Box3.Description": "监测你的网站在世界各地是否被屏蔽?通过 [OONI Probe](https://ooni.org/install/) 用户测试你的网站,可获取[实时开放数据](https://ooni.org/data/),展示如何在技术上实施屏蔽以及哪些网络进行了屏蔽。使用该平台生成 OONI Run 链接,对你的网站进行测试!", + "Home.Button.CreateRunLink": "创建 OONI Run 链接 ", + "Home.Button.Login": "登录以创建 OONI Run 链接", + "Nettest.DeprecationWarning": "该版本的 OONI Run 将于 2025 年 1 月弃用。\n如需迁移至最新版本 (OONI Run v2),请登录并创建新的链接", + "List.Title": "我的 OONI Run 链接", + "List.Empty": "你没有任何 OONI Run 链接", + "List.Button.Create": "创建你的第一个链接", + "LinkView.Error.DoesNotExist": "OONI Run 链接不存在", + "LinkView.Error.ServerError": "出错了。", + "TestListForm.Validation.Required": "必需字段", + "TestListForm.Validation.Min2": "不可少于 2 个字符。", + "TestListForm.Validation.Max50": "不可多于 50 个字符。", + "TestListForm.Validation.FutureDate": "到期日期应是未来时间。", + "TestListForm.Validation.Min1Url": "必需至少 1 个 URL。", + "TestListForm.MigrationModalLink": "是否使用旧的 OONI Run v1 链接?请点击此处从这类链接添加 URL。", + "TestListForm.Label.Color": "颜色", + "TestListForm.Label.TestListName": "你的 OONI Run 链接标题", + "TestListForm.Label.ShortDescription": "简短描述", + "TestListForm.Label.Description": "描述", + "TestListForm.Label.Email": "作者电子邮箱", + "TestListForm.Label.ExpirationDate": "到期日期", + "TestListForm.Label.Icon": "图标", + "TestListForm.OptionsFields.Key": "键", + "TestListForm.OptionsFields.Value": "值", + "TestListForm.OptionsFields.AddOption": "添加选项", + "TestListForm.NettestFields.Urls": "URL", + "TestListForm.Intl.Language": "语言", + "TestListForm.Intl.Translation": "翻译", + "TestListForm.Intl.AddTranslation": "添加翻译", + "TestListForm.Inputs.AddInput": "添加 URL", + "TestListForm.Icon.Select": "选择图标", + "TestListForm.Icon.Replace": "替换图标", + "TestListForm.AdminNettests.Tests": "测试", + "TestListForm.AdminNettests.AddTest": "添加测试 ", + "TestListForm.AdminNettests.DeleteTest": "删除测试", + "TestListForm.AdminNettests.EnableManualRun": "启用手动运行", + "TestListForm.AdminNettests.EnableBackgroundRun": "启用背景运行", + "TestListForm.AdminNettests.BackendOptions": "后端选项", + "TestListForm.AdminNettests.Options": "选项", + "MigrationModal.RunLink": "OONI Run 链接", + "MigrationModal.AddUrls": "添加 URL", + "General.Cancel": "取消", + "General.Edit": "编辑", + "RevisionView.TopNotice": "这是 {date} 的修订。返回当前链接。", + "RevisionView.LinkInfo": "链接信息", + "DescriptorDetails.CreatedByOn": "由 {author} 于 {date} 创建。", + "DescriptorDetails.CreatedOn": "在 {date} 创建。", + "DescriptorDetails.LastUpdated": "最新更新日期 {date}。", + "DescriptorDetails.ExpirationDate": "到期日期 {date}。", + "DescriptorDetails.ExpirationNotice": "你的链接将于 {date} 到期", + "DescriptorDetails.UpdateButton": "马上更新", + "DescriptorView.LinkContent": "链接内容", + "Revisions.Title": "上次修改", + "ArchivedTag.Expired": "已到期", + "DescriptorCard.CreatedBy": "由 {author} 创建", + "DescriptorCard.Updated": "于 {date} 更新", + "DescriptorCard.Expired": "于 {date} 到期", + "DescriptorCard.Expiring": "到期日期 {date}", + "Navbar.Login": "登录", + "Navbar.Logout": "注销", + "Navbar.List": "我的 OONI Run 链接", + "Navbar.Create": "生成 OONI Run 链接", + "Login.Title": "请登录继续操作", + "Login.EnterEmail": "添加电子邮箱地址,然后点击电子邮件接收的链接进行登录。\n\n在你创建 OONI Run 链接时,我们将存储你的电子邮箱地址,以便 OONI Probe 用户收到并信任你的 OONI Run 链接。", + "Login.Submitted": "登录请求已提交。请检查你的电子邮件中的链接,以便激活并登录你的账户。", + "Login.LoggingIn": "正在登录…", + "Login.Failure": "尝试再次登录", + "Login.Button": "发送链接", + "Login.Success": "成功登录。正在重定向…", + "Footer.Text.Slogan": "全球社区,检测全球各地的互联网审查。", + "Footer.Heading.About": "关于", + "Footer.Heading.OONIProbe": "OONI Probe", + "Footer.Heading.Updates": "更新", + "Footer.Link.About": "OONI", + "Footer.Link.DataPolicy": "数据政策", + "Footer.Link.DataLicense": "数据许可", + "Footer.Link.Contact": "联系我们", + "Footer.Link.Probe": "安装", + "Footer.Link.Tests": "测试", + "Footer.Link.Code": "源代码", + "Footer.Link.API": "API", + "Footer.Link.Blog": "博客", + "Footer.Link.Twitter": "Twitter", + "Footer.Link.MailingList": "邮件列表", + "Footer.Link.Slack": "Slack", + "Footer.Text.Copyright": "© {currentYear} Open Observatory of Network Interference (OONI)", + "Footer.Text.CCommons": "内容以知识共享许可协议授权使用。", + "Tests.WebConnectivity.Name": "网页连通性测试", + "Tests.Telegram.Name": "Telegram 测试", + "Tests.Facebook.Name": "Facebook Messenger 测试", + "Tests.WhatsApp.Name": "WhatsApp 测试", + "Tests.Signal.Name": "Signal 测试", + "Tests.HTTPInvalidReqLine.Name": "HTTP 无效请求行测试", + "Tests.HTTPHeaderManipulation.Name": "HTTP 头字段操控测试", + "Tests.NDT.Name": "NDT 网速测试", + "Tests.Dash.Name": "DASH 视频流测试", + "Tests.TorVanilla.Name": "Tor (Vanilla) 测试", + "Tests.BridgeReachability.Name": "Tor 网桥可及性测试", + "Tests.TCPConnect.Name": "TCP 连接测试", + "Tests.DNSConsistency.Name": "DNS 一致性测试", + "Tests.HTTPRequests.Name": "HTTP 请求测试", + "Tests.Psiphon.Name": "Psiphon 测试", + "Tests.Tor.Name": "Tor 测试", + "Tests.RiseupVPN.Name": "RiseupVPN 测试", + "Tests.TorSnowflake.Name": "Tor Snowflake 测试", + "Tests.DNSCheck.Name": "DNS 检测", + "Tests.StunReachability.Name": "STUN 可及性", + "Tests.URLGetter.Name": "URL 获取器", + "Tests.ProbeWeb.Name": "OONI Probe Web", + "DateRange.OneWeek": "一周", + "DateRange.OneMonth": "一个月", + "DateRange.SixMonths": "六个月", + "DateRange.Apply": "应用", + "DateRange.Cancel": "取消" +} \ No newline at end of file diff --git a/scripts/build-translations.js b/scripts/build-translations.js index 2b1fba6..2f27607 100644 --- a/scripts/build-translations.js +++ b/scripts/build-translations.js @@ -21,16 +21,16 @@ supportedLanguages.forEach((lang) => { }) // Build the locale files to be sent to the browser -const translationsMap = supportedLanguages.reduce((t, lang) => { - const formattedLang = lang.toLowerCase().replace("_", "-") - t[formattedLang] = JSON.parse( - readFileSync(`${LANG_DIR}/${formattedLang}.json`), - ) - return t -}, {}) +// const translationsMap = supportedLanguages.reduce((t, lang) => { +// const formattedLang = lang.toLowerCase().replace("_", "-") +// t[formattedLang] = JSON.parse( +// readFileSync(`${LANG_DIR}/${formattedLang}.json`), +// ) +// return t +// }, {}) -const translationsContent = `window.OONITranslations = ${JSON.stringify( - translationsMap, -)}` -writeFileSync(`${LANG_DIR}/translations.js`, translationsContent) -console.log(`> Wrote translations to: ${LANG_DIR}/translations.js`) +// const translationsContent = `window.OONITranslations = ${JSON.stringify( +// translationsMap, +// )}` +// writeFileSync(`${LANG_DIR}/translations.js`, translationsContent) +// console.log(`> Wrote translations to: ${LANG_DIR}/translations.js`) From c3d51c794f387c27884fa4dcff89e51249788e73 Mon Sep 17 00:00:00 2001 From: majakomel Date: Thu, 24 Oct 2024 18:24:52 +0200 Subject: [PATCH 2/5] Update strings --- components/LocaleSwitcher.tsx | 53 ++++------ package.json | 2 +- public/static/lang/es.json | 25 ----- public/static/lang/fa.json | 25 ----- public/static/lang/pt-br.json | 27 ------ public/static/lang/th.json | 25 ----- public/static/lang/vi.json | 27 ------ public/static/lang/zh-TW.json | 25 ----- yarn.lock | 176 ++++++++++++++++++---------------- 9 files changed, 114 insertions(+), 271 deletions(-) delete mode 100644 public/static/lang/es.json delete mode 100644 public/static/lang/fa.json delete mode 100644 public/static/lang/pt-br.json delete mode 100644 public/static/lang/th.json delete mode 100644 public/static/lang/vi.json delete mode 100644 public/static/lang/zh-TW.json diff --git a/components/LocaleSwitcher.tsx b/components/LocaleSwitcher.tsx index 9178488..e22d0ed 100644 --- a/components/LocaleSwitcher.tsx +++ b/components/LocaleSwitcher.tsx @@ -8,25 +8,34 @@ import '@formatjs/intl-displaynames/polyfill' import '@formatjs/intl-displaynames/locale-data/ar' import '@formatjs/intl-displaynames/locale-data/de' import '@formatjs/intl-displaynames/locale-data/en' -import '@formatjs/intl-displaynames/locale-data/es' -import '@formatjs/intl-displaynames/locale-data/fa' -import '@formatjs/intl-displaynames/locale-data/fr' -import '@formatjs/intl-displaynames/locale-data/my' -import '@formatjs/intl-displaynames/locale-data/pt' +import '@formatjs/intl-displaynames/locale-data/id' +// import '@formatjs/intl-displaynames/locale-data/es' +// import '@formatjs/intl-displaynames/locale-data/fa' +// import '@formatjs/intl-displaynames/locale-data/fr' +import '@formatjs/intl-displaynames/locale-data/km' +// import '@formatjs/intl-displaynames/locale-data/my' +// import '@formatjs/intl-displaynames/locale-data/pt' import '@formatjs/intl-displaynames/locale-data/ru' -import '@formatjs/intl-displaynames/locale-data/sw' -import '@formatjs/intl-displaynames/locale-data/th' +// import '@formatjs/intl-displaynames/locale-data/sw' +// import '@formatjs/intl-displaynames/locale-data/th' import '@formatjs/intl-displaynames/locale-data/tr' -import '@formatjs/intl-displaynames/locale-data/vi' +// import '@formatjs/intl-displaynames/locale-data/vi' import '@formatjs/intl-displaynames/locale-data/zh-Hans' import '@formatjs/intl-displaynames/locale-data/zh-Hant' + +const getLocale = (locale: string) => { + if (locale === 'zh-cn') return 'zh-Hans' + // if (locale === 'pt-BR') return 'pt' + return locale +} + export const getLocalisedLanguageName = ( regionCode: string, locale: string, ) => { try { - return new Intl.DisplayNames([locale], { type: 'language' }).of( + return new Intl.DisplayNames([getLocale(locale)], { type: 'language' }).of( String(regionCode), ) } catch (e) { @@ -69,32 +78,6 @@ const LanguageSelect = (props: LanguageSelectProps) => (
) -// const LanguageSelect = styled.select` -// color: ${(props) => props.theme.colors.white}; -// background: none; -// border: none; -// text-transform: capitalize; -// cursor: pointer; -// font-family: inherit; -// font-size: inherit; -// padding: 0; -// padding-bottom: 6px; -// padding-right: 10px; -// outline: none; -// appearance: none; -// -webkit-appearance: none; -// -moz-appearance: none; -// -ms-appearance: none; -// -o-appearance: none; -// background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2012%2012%22%3E%3Ctitle%3Edown-arrow%3C%2Ftitle%3E%3Cg%20fill%3D%22%23FFFFFF%22%3E%3Cpath%20d%3D%22M10.293%2C3.293%2C6%2C7.586%2C1.707%2C3.293A1%2C1%2C0%2C0%2C0%2C.293%2C4.707l5%2C5a1%2C1%2C0%2C0%2C0%2C1.414%2C0l5-5a1%2C1%2C0%2C1%2C0-1.414-1.414Z%22%20fill%3D%22%23FFFFFF%22%3E%3C%2Fpath%3E%3C%2Fg%3E%3C%2Fsvg%3E"); -// background-size: .6em; -// background-position: 100% 0.2rem; -// background-repeat: no-repeat; -// html[dir="rtl"] &, body[dir="rtl"] &: { -// background-position: 0, 0.2rem; -// }, -// ` - const LocaleSwitcher = () => { const router = useRouter() const { pathname, asPath, query } = router diff --git a/package.json b/package.json index 51335d3..e3d44f9 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "react-dom": "^18.3.1", "react-hook-form": "^7.52.2", "react-icons": "^5.3.0", - "react-intl": "^6.6.8", + "react-intl": "^6.8.2", "react-outside-click-handler": "^1.3.0", "swr": "^2.2.5", "tailwind-merge": "^2.5.2", diff --git a/public/static/lang/es.json b/public/static/lang/es.json deleted file mode 100644 index 422c3b1..0000000 --- a/public/static/lang/es.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Hero.SubTitle": "Coordinar las pruebas de censura de sitio web", - "Title.URLs": "URLs", - "Button.AddUrl": "Agregar URL", - "Button.Generate": "Generar", - "Share.Twitter.Tweet": "¡Ejecuta OONI Probe para probar la censura!", - "Home.Heading.TestName": "Nombre de la prueba", - "Sidebar.WebConnectivity.Title": "Censura en Internet", - "Sidebar.Performance.Title": "Velocidad y Rendimiento", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "¡Tu enlace está listo!", - "Modal.Heading.ShareIt": "Compártelo en las redes sociales", - "Modal.Button.Link": "Enlace", - "Modal.Heading.ShareThisURL": "Comparte este enlace con las usuarias de la aplicación móvil OONI Probe.", - "Modal.Heading.EmbedThisCode": "O inserta este código en tu sitio web", - "Modal.Button.Done": "Hecho", - "Nettest.Heading.HaveMobileApp": "Ya tienes la aplicación móvil OONI Probe", - "Nettest.Text.HaveMobileApp": "Toca Ejecutar y abre este enlace con tu aplicación móvil OONI Probe para comenzar la prueba.", - "Nettest.Button.Run": "Ejecutar", - "Nettest.Heading.InstallApp": "Instala la aplicación móvil OONI Probe", - "Nettest.Text.InstallApp": "Actualmente, los enlaces OONI Run solo funcionan con la aplicación móvil OONI Probe.", - "Nettest.Button.Install": "Instalar", - "Notice.Paste": "Nota: si tienes una lista larga de URLs para agregar, puedes copiarlas y pegarlas en uno de los cuadros a continuación.", - "WhatCanYouDoText.WebCensorship": "Agrega sitios web a continuación que te gustaría probar para la censura. Haz clic en \\\"Generar\\\" para crear un enlace basado en esos sitios web. ¡Comparte ese enlace con los usuarios de la aplicación móvil OONI Probe para que puedan probar los sitios web de tu elección!" -} \ No newline at end of file diff --git a/public/static/lang/fa.json b/public/static/lang/fa.json deleted file mode 100644 index 68fabb7..0000000 --- a/public/static/lang/fa.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Hero.SubTitle": "هماهنگ کردن آزمایش سانسور وب‌سایت", - "Title.URLs": "نشانی‌های اینترنتی", - "Button.AddUrl": "افزودن نشانی اینترنتی", - "Button.Generate": "تولید کردن", - "Share.Twitter.Tweet": "برای آزمایش سانسور، OONI Probe را اجرا کنید!", - "Home.Heading.TestName": "نام آزمایش", - "Sidebar.WebConnectivity.Title": "سانسور اینترنت", - "Sidebar.Performance.Title": "سرعت و عملکرد", - "Sidebar.Middleboxes.Title": "جعبه‌های میانی", - "Modal.Heading.LinkReady": "پیوند شما آماده است!", - "Modal.Heading.ShareIt": "آن را در شبکه‌های اجتماعی به اشتراک بگذارید", - "Modal.Button.Link": "پیوند", - "Modal.Heading.ShareThisURL": "این پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید", - "Modal.Heading.EmbedThisCode": "یا این کد را در وب‌سایت خود قرار دهید", - "Modal.Button.Done": "انجام شد", - "Nettest.Heading.HaveMobileApp": "شما در حال حاضر برنامه تلفن همراه OONI Probe را دارید", - "Nettest.Text.HaveMobileApp": "روی «اجرا» ضربه بزنید و این پیوند را با برنامه تلفن همراه OONI Probe خود برای شروع آزمایش باز کنید.", - "Nettest.Button.Run": "اجرا", - "Nettest.Heading.InstallApp": "برنامه تلفن همراه OONI Probe را نصب کنید", - "Nettest.Text.InstallApp": "در حال حاضر، پیوندهای OONI Run فقط با برنامه تلفن همراهOONI Probe کار می‌کنند.", - "Nettest.Button.Install": "نصب", - "Notice.Paste": "توجه: اگر فهرست طولانی از نشانی‌های اینترنتی برای افزودن دارید، می‌توانید آنها را کپی کرده و در یکی از کادرهای زیر جایگذاری کنید.", - "WhatCanYouDoText.WebCensorship": "وب‌سایت‌هایی را در زیر اضافه کنید که می‌خواهید برای سانسور آزمایش کنید. برای ایجاد پیوند بر اساس آن وب‌سایت‌ها، روی \\\"تولید کردن\\\" کلیک کنید. آن پیوند را با کاربران برنامه تلفن همراه OONI Probe به اشتراک بگذارید تا بتوانند وب‌سایت‌های مورد نظر شما را آزمایش کنند!" -} \ No newline at end of file diff --git a/public/static/lang/pt-br.json b/public/static/lang/pt-br.json deleted file mode 100644 index f26a285..0000000 --- a/public/static/lang/pt-br.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "Hero.SubTitle": "Coordenar testes de censura de websites", - "Title.URLs": "URLs", - "Button.AddUrl": "Adicionar URL", - "Button.Generate": "Gerar", - "Share.Twitter.Tweet": "Rode o OONI Probe para testes de censura!", - "Home.Heading.TestName": "Testar nome", - "Sidebar.WebConnectivity.Title": "Censura na internet", - "Sidebar.Performance.Title": "Velocidade e desempenho", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "Seu link está pronto!", - "Modal.Heading.ShareIt": "Compartilhe nas redes sociais", - "Modal.Button.Link": "Link", - "Modal.Heading.ShareThisURL": "Compartilhe este link com usuários do aplicativo móvel OONI Probe", - "Modal.Heading.EmbedThisCode": "Ou incorpore este código em seu site", - "Modal.Button.Done": "Feito", - "Nettest.Heading.HaveMobileApp": "Você já tem o aplicativo móvel OONI Probe", - "Nettest.Text.HaveMobileApp": "Toque em Executar e abra este link com seu aplicativo móvel OONI Probe para iniciar o teste", - "Nettest.Button.Run": "Rodar", - "Nettest.Heading.InstallApp": "Instalar o OONI Probe para aplicativos móveis", - "Nettest.Text.InstallApp": "Atualmente, os links OONI Run funcionam apenas com o aplicativo móvel OONI Probe", - "Nettest.Button.Install": "Instalar", - "Notice.Paste": "Observação: se você tiver uma longa lista de URLs para adicionar, poderá copiá-los e colá-los em uma das caixas abaixo", - "WhatCanYouDoText.WebCensorship": "Adicione abaixo os sites que você gostaria de testar quanto à censura. Clique em “Gerar” para criar um link baseado nesses sites. Compartilhe esse link com os usuários do aplicativo móvel OONI Probe para que eles possam testar os sites de sua escolha!", - "Error.Empty": "Não pode estar vazio.", - "Error.UrlFormat": "Deve ser um formato de URL válido, por exemplo, \"https://ooni.org/post/\"" -} \ No newline at end of file diff --git a/public/static/lang/th.json b/public/static/lang/th.json deleted file mode 100644 index abdce9b..0000000 --- a/public/static/lang/th.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Hero.SubTitle": "ช่วยกันทดสอบการปิดกั้นเว็บไซต์", - "Title.URLs": "URL", - "Button.AddUrl": "เพิ่ม URL", - "Button.Generate": "สร้าง", - "Share.Twitter.Tweet": "ใช้ OONI Probe เพื่อตรวจหาการปิดกั้น!", - "Home.Heading.TestName": "ชื่อการทดสอบ", - "Sidebar.WebConnectivity.Title": "การปิดกั้นอินเทอร์เน็ต", - "Sidebar.Performance.Title": "ความเร็วและประสิทธิภาพ", - "Sidebar.Middleboxes.Title": "ตัวกลาง", - "Modal.Heading.LinkReady": "ลิงก์ของคุณพร้อมแล้ว!", - "Modal.Heading.ShareIt": "แบ่งปันมันบนสื่อสังคม", - "Modal.Button.Link": "ลิงก์", - "Modal.Heading.ShareThisURL": "แบ่งปันลิงก์นี้กับผู้ใช้แอป OONI Probe บนอุปกรณ์พกพา", - "Modal.Heading.EmbedThisCode": "หรือฝังโค้ดนี้ในเว็บไซต์ของคุณ", - "Modal.Button.Done": "เสร็จสิ้น", - "Nettest.Heading.HaveMobileApp": "คุณมีแอป OONI Probe บนอุปกรณ์พกพาอยู่แล้ว", - "Nettest.Text.HaveMobileApp": "แตะ 'เริ่มทดสอบ' และเปิดลิงก์นี้ด้วยแอป OONI Probe บนอุปกรณ์พกพาของคุณ เพื่อเริ่มการทดสอบ", - "Nettest.Button.Run": "เริ่มทดสอบ", - "Nettest.Heading.InstallApp": "ติดตั้งแอป OONI Probe บนอุปกรณ์พกพา", - "Nettest.Text.InstallApp": "ปัจจุบัน ลิงก์ OONI Run ใช้ได้เฉพาะกับแอป OONI Probe บนอุปกรณ์พกพาเท่านั้น", - "Nettest.Button.Install": "ติดตั้ง", - "Notice.Paste": "หมายเหตุ: ถ้ารายการ URL ที่จะเพิ่มของคุณยาวมากๆ คุณสามารถทำสำเนามันและวางลงในกล่องใดก็ได้ด้านล่างนี้", - "WhatCanYouDoText.WebCensorship": "เพิ่มเว็บไซต์ที่คุณต้องการทดสอบหาการปิดกั้นที่ด้านล่างนี้ คลิก 'สร้าง' เพื่อสร้างลิงก์จากบรรดาเว็บไซต์ดังกล่าว แบ่งปันลิงก์นั้นให้กับผู้ใช้ OONI Probe บนอุปกรณ์พกพาคนอื่นๆ พวกเขาจะได้สามารถทดสอบบรรดาเว็บไซต์ที่คุณเลือกมาได้!" -} \ No newline at end of file diff --git a/public/static/lang/vi.json b/public/static/lang/vi.json deleted file mode 100644 index c12f44b..0000000 --- a/public/static/lang/vi.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "Hero.SubTitle": "Phối hợp kiểm tra kiểm duyệt trang web", - "Title.URLs": "URLs", - "Button.AddUrl": "Thêm URL", - "Button.Generate": "Tạo ra", - "Share.Twitter.Tweet": "Chạy OONI Probe để phát hiện kiểm duyệt!", - "Home.Heading.TestName": "Tên Kiểm Tra", - "Sidebar.WebConnectivity.Title": "Kiểm Duyệt Internet", - "Sidebar.Performance.Title": "Tốc độ & Hiệu suất", - "Sidebar.Middleboxes.Title": "Middleboxes", - "Modal.Heading.LinkReady": "Liên kết đã sẵn sàng", - "Modal.Heading.ShareIt": "Chia sẻ trên mạng xã hội", - "Modal.Button.Link": "Liên kết", - "Modal.Heading.ShareThisURL": "Chia sẻ liên kết này với người dùng ứng dụng di động OONI Probe ", - "Modal.Heading.EmbedThisCode": "Hoặc cài mã này trong trang web của bạn", - "Modal.Button.Done": "Xong", - "Nettest.Heading.HaveMobileApp": "Bạn đã có ứng dụng di động OONI Probe", - "Nettest.Text.HaveMobileApp": "Nhấn Chạy và mở liên kết này ra bằng ứng dụng di động OONI Probe để bắt đầu kiểm tra.", - "Nettest.Button.Run": "Chạy", - "Nettest.Heading.InstallApp": "Cài đặt ứng dụng di động OONI Probe", - "Nettest.Text.InstallApp": "Hiện thời, liên kết OONI Run chỉ chạy với ứng dụng di động OONI Probe.", - "Nettest.Button.Install": "Cài đặt", - "Notice.Paste": "Ghi chú: nếu bạn có một danh sách nhiều URL để thêm vào, bạn có thể sao chép và dán vào hộp dưới đây.", - "WhatCanYouDoText.WebCensorship": "Thêm trang web nào bạn muốn kiểm tra vào bên dưới. Bấm \"Tạo ra\" để tạo ra một liên kết dựa vào trang web đó. Chia sẻ liên kết đó với người dùng ứng dụng di động OONI Probe khác để họ có thể kiểm tra các trang web bạn chọn!", - "Error.Empty": "Không thể để trống", - "Error.UrlFormat": "Nên có dạng URL hợp lệ, ví dụ như \"https://ooni.org/post/\"" -} \ No newline at end of file diff --git a/public/static/lang/zh-TW.json b/public/static/lang/zh-TW.json deleted file mode 100644 index 821831d..0000000 --- a/public/static/lang/zh-TW.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "Hero.SubTitle": "協作型網站審查測量", - "Title.URLs": "網址", - "Button.AddUrl": "新增網址 ", - "Button.Generate": "生成", - "Share.Twitter.Tweet": "執行 OONI Probe 來測量審查狀況", - "Home.Heading.TestName": "測試名稱", - "Sidebar.WebConnectivity.Title": "網際網路審查", - "Sidebar.Performance.Title": "速度 & 效能", - "Sidebar.Middleboxes.Title": "中間盒", - "Modal.Heading.LinkReady": "您的鏈接已就緒!", - "Modal.Heading.ShareIt": "分享到社群媒體", - "Modal.Button.Link": "鏈接", - "Modal.Heading.ShareThisURL": "分享此鏈接給 OONI Probe 行動用戶", - "Modal.Heading.EmbedThisCode": "或將此代碼篏入您的網站", - "Modal.Button.Done": "完成", - "Nettest.Heading.HaveMobileApp": "您已安裝了 OONI Probe 行動應用", - "Nettest.Text.HaveMobileApp": "輕觸執行並利用 OONI Probe 開啟鏈接以便啟動測量", - "Nettest.Button.Run": "執行", - "Nettest.Heading.InstallApp": "安裝 OONI Probe 行動應用", - "Nettest.Text.InstallApp": "目前 OONI Run 鏈接僅限於 OONI Probe 行動應用使用", - "Nettest.Button.Install": "安裝", - "Notice.Paste": "備註:如果有一長串網址清單待加入,可以下方方框來複製貼上", - "WhatCanYouDoText.WebCensorship": "在下方新增測試是否遭審之網址,點擊\"\\生成\\\" 來建立該網站的鏈接,透過 OONI Probe 行動應用來分享該鏈接,讓其它用戶可以測試您所選的網站。" -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 8fc62ec..2f5333e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1226,75 +1226,76 @@ resolved "https://registry.yarnpkg.com/@formatjs/cli/-/cli-6.2.12.tgz#5295e4f6351ed563bcd49fb6479905165098bcd4" integrity sha512-bt1NEgkeYN8N9zWcpsPu3fZ57vv+biA+NtIQBlyOZnCp1bcvh+vNTXvmwF4C5qxqDtCylpOIb3yi3Ktgp4v0JQ== -"@formatjs/ecma402-abstract@2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz#39197ab90b1c78b7342b129a56a7acdb8f512e17" - integrity sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g== +"@formatjs/ecma402-abstract@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@formatjs/ecma402-abstract/-/ecma402-abstract-2.2.0.tgz#36f5bc0dac4ca77ca429fe44bd95b32d5ccd98dd" + integrity sha512-IpM+ev1E4QLtstniOE29W1rqH9eTdx5hQdNL8pzrflMj/gogfaoONZqL83LUeQScHAvyMbpqP5C9MzNf+fFwhQ== dependencies: - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" + "@formatjs/fast-memoize" "2.2.1" + "@formatjs/intl-localematcher" "0.5.5" + tslib "^2.7.0" -"@formatjs/fast-memoize@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz#33bd616d2e486c3e8ef4e68c99648c196887802b" - integrity sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA== +"@formatjs/fast-memoize@2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@formatjs/fast-memoize/-/fast-memoize-2.2.1.tgz#74575f18c6a789472517995ca9686e7a3f7c0b60" + integrity sha512-XS2RcOSyWxmUB7BUjj3mlPH0exsUzlf6QfhhijgI941WaJhVxXQ6mEWkdUFIdnKi3TuTYxRdelsgv3mjieIGIA== dependencies: - tslib "^2.4.0" + tslib "^2.7.0" -"@formatjs/icu-messageformat-parser@2.7.8": - version "2.7.8" - resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz#f6d7643001e9bb5930d812f1f9a9856f30fa0343" - integrity sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA== +"@formatjs/icu-messageformat-parser@2.8.0": + version "2.8.0" + resolved "https://registry.yarnpkg.com/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.8.0.tgz#dccbc591720b9acc01bdf064fae655dd1f1470ac" + integrity sha512-r2un3fmF9oJv3mOkH+wwQZ037VpqmdfahbcCZ9Lh+p6Sx+sNsonI7Zcr6jNMm1s+Si7ejQORS4Ezlh05mMPAXA== dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/icu-skeleton-parser" "1.8.2" - tslib "^2.4.0" + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/icu-skeleton-parser" "1.8.4" + tslib "^2.7.0" -"@formatjs/icu-skeleton-parser@1.8.2": - version "1.8.2" - resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz#2252c949ae84ee66930e726130ea66731a123c9f" - integrity sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q== +"@formatjs/icu-skeleton-parser@1.8.4": + version "1.8.4" + resolved "https://registry.yarnpkg.com/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.4.tgz#8ca9c2efa2ef2f9e26c0502892a21699dcff8b4f" + integrity sha512-LMQ1+Wk1QSzU4zpd5aSu7+w5oeYhupRwZnMQckLPRYhSjf2/8JWQ882BauY9NyHxs5igpuQIXZDgfkaH3PoATg== dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - tslib "^2.4.0" + "@formatjs/ecma402-abstract" "2.2.0" + tslib "^2.7.0" -"@formatjs/intl-displaynames@6.6.8": - version "6.6.8" - resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz#2f5afac8df83167f5a6ef8543600eaf1ef99c885" - integrity sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g== +"@formatjs/intl-displaynames@6.7.0": + version "6.7.0" + resolved "https://registry.yarnpkg.com/@formatjs/intl-displaynames/-/intl-displaynames-6.7.0.tgz#d5b99bef30abcfe476a39db1da15d43205e3f87c" + integrity sha512-k1mu06yYhAuZv50ZGcdHfgKHFC3lQg9LgFuLihlvHdbbXSjDVqKMg+7NxJhCiYDi27J05YJHmanq2wP9hbmVEA== dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/intl-localematcher" "0.5.5" + tslib "^2.7.0" -"@formatjs/intl-listformat@7.5.7": - version "7.5.7" - resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz#125e05105fabd1ae5f11881d6ab74484f2098ee4" - integrity sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g== +"@formatjs/intl-listformat@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@formatjs/intl-listformat/-/intl-listformat-7.6.0.tgz#30163ba5859d315a567681ce6c99e40c2f2cf4b0" + integrity sha512-0u8OsrHB6MzWzqdTULk2RlkO705hyCrP8Lg0EYQ+H8UHPfVKXX7pA9p39TmMn8+MxZ0WUKVWRv5qAPD1fey0Gg== dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/intl-localematcher" "0.5.4" - tslib "^2.4.0" + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/intl-localematcher" "0.5.5" + tslib "^2.7.0" -"@formatjs/intl-localematcher@0.5.4": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz#caa71f2e40d93e37d58be35cfffe57865f2b366f" - integrity sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g== +"@formatjs/intl-localematcher@0.5.5": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@formatjs/intl-localematcher/-/intl-localematcher-0.5.5.tgz#b24f100f30658104d5f6db35b0b8d97235298681" + integrity sha512-t5tOGMgZ/i5+ALl2/offNqAQq/lfUnKLEw0mXQI4N4bqpedhrSE+fyKLpwnd22sK0dif6AV+ufQcTsKShB9J1g== dependencies: - tslib "^2.4.0" + tslib "^2.7.0" -"@formatjs/intl@2.10.4": - version "2.10.4" - resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.4.tgz#e1819e0858fb05ca65923a020f346bc74e894e92" - integrity sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - "@formatjs/intl-displaynames" "6.6.8" - "@formatjs/intl-listformat" "7.5.7" - intl-messageformat "10.5.14" - tslib "^2.4.0" +"@formatjs/intl@2.10.9": + version "2.10.9" + resolved "https://registry.yarnpkg.com/@formatjs/intl/-/intl-2.10.9.tgz#ea16e51140cb69664d839175f6f9a4ca8c4d0c49" + integrity sha512-PU18v48n8SaoWDaJ5h2SWd2R8jpK7hUASovo/RR0KtvmMJTUmHsKHwMyuYCdeMMyw6QEbVS8SSWVZlcHBWZ51A== + dependencies: + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/fast-memoize" "2.2.1" + "@formatjs/icu-messageformat-parser" "2.8.0" + "@formatjs/intl-displaynames" "6.7.0" + "@formatjs/intl-listformat" "7.6.0" + intl-messageformat "10.7.1" + tslib "^2.7.0" "@hookform/resolvers@^3.6.0": version "3.9.0" @@ -2170,7 +2171,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== -"@types/hoist-non-react-statics@^3.3.1": +"@types/hoist-non-react-statics@3": version "3.3.5" resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz#dab7867ef789d87e2b4b0003c9d65c49cc44a494" integrity sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg== @@ -2267,7 +2268,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@16 || 17 || 18", "@types/react@^18.2.64": +"@types/react@*", "@types/react@^18.2.64": version "18.3.5" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.5.tgz#5f524c2ad2089c0ff372bbdabc77ca2c4dbadf8f" integrity sha512-WeqMfGJLGuLCqHGYRGHxnKrXcTitc6L/nBUWfWPcTarG3t9PsquqUMuVeXZeca+mglY4Vo5GZjCi0A3Or2lnxA== @@ -2275,6 +2276,14 @@ "@types/prop-types" "*" csstype "^3.0.2" +"@types/react@^18.3.11": + version "18.3.12" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.3.12.tgz#99419f182ccd69151813b7ee24b792fe08774f60" + integrity sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw== + dependencies: + "@types/prop-types" "*" + csstype "^3.0.2" + "@types/shimmer@^1.0.2": version "1.2.0" resolved "https://registry.yarnpkg.com/@types/shimmer/-/shimmer-1.2.0.tgz#9b706af96fa06416828842397a70dfbbf1c14ded" @@ -3880,7 +3889,7 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: +hoist-non-react-statics@3, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.1, hoist-non-react-statics@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== @@ -3993,15 +4002,15 @@ internal-slot@^1.0.7: hasown "^2.0.0" side-channel "^1.0.4" -intl-messageformat@10.5.14: - version "10.5.14" - resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.5.14.tgz#e5bb373f8a37b88fbe647d7b941f3ab2a37ed00a" - integrity sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w== +intl-messageformat@10.7.1: + version "10.7.1" + resolved "https://registry.yarnpkg.com/intl-messageformat/-/intl-messageformat-10.7.1.tgz#dcfc52c4523a082993fa1655a9b03fc1e2fbeef9" + integrity sha512-xQuJW2WcyzNJZWUu5xTVPOmNSA1Sowuu/NKFdUid5Fxx/Yl6/s4DefTU/y7zy+irZLDmFGmTLtnM8FqpN05wlA== dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/fast-memoize" "2.2.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - tslib "^2.4.0" + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/fast-memoize" "2.2.1" + "@formatjs/icu-messageformat-parser" "2.8.0" + tslib "^2.7.0" is-arguments@^1.0.4: version "1.1.1" @@ -5158,21 +5167,21 @@ react-icons@^5.3.0: resolved "https://registry.yarnpkg.com/react-icons/-/react-icons-5.3.0.tgz#ccad07a30aebd40a89f8cfa7d82e466019203f1c" integrity sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg== -react-intl@^6.6.8: - version "6.6.8" - resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.6.8.tgz#cb60c90502d0025caf9f86ec298cdc4348da17c2" - integrity sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA== - dependencies: - "@formatjs/ecma402-abstract" "2.0.0" - "@formatjs/icu-messageformat-parser" "2.7.8" - "@formatjs/intl" "2.10.4" - "@formatjs/intl-displaynames" "6.6.8" - "@formatjs/intl-listformat" "7.5.7" - "@types/hoist-non-react-statics" "^3.3.1" - "@types/react" "16 || 17 || 18" - hoist-non-react-statics "^3.3.2" - intl-messageformat "10.5.14" - tslib "^2.4.0" +react-intl@^6.8.2: + version "6.8.2" + resolved "https://registry.yarnpkg.com/react-intl/-/react-intl-6.8.2.tgz#29c3043bad4956bb919c80162b9c5d6b051cb6e1" + integrity sha512-jrtc1ZwwqBYmBQ9xxbQSKJBxg7G8pEv5rLmX22JUAMXhvdVBtA3fMg6xlJ193SZuZYO8D3mEBQlH3rl2HdaX8A== + dependencies: + "@formatjs/ecma402-abstract" "2.2.0" + "@formatjs/icu-messageformat-parser" "2.8.0" + "@formatjs/intl" "2.10.9" + "@formatjs/intl-displaynames" "6.7.0" + "@formatjs/intl-listformat" "7.6.0" + "@types/hoist-non-react-statics" "3" + "@types/react" "^18.3.11" + hoist-non-react-statics "3" + intl-messageformat "10.7.1" + tslib "^2.7.0" react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" @@ -5897,6 +5906,11 @@ tslib@^2.0.3, tslib@^2.4.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== +tslib@^2.7.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" + integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== + tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" From 98fc521ce0a1b0474e896e624ab1d58ae2dad832 Mon Sep 17 00:00:00 2001 From: majakomel Date: Tue, 29 Oct 2024 11:22:09 +0100 Subject: [PATCH 3/5] Layout fixes --- components/Footer.tsx | 6 +++--- components/form/AdminNettestFields.tsx | 2 +- components/form/IntlFields.tsx | 2 +- components/form/NettestFields.tsx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/components/Footer.tsx b/components/Footer.tsx index 7ae3be2..3c056f7 100644 --- a/components/Footer.tsx +++ b/components/Footer.tsx @@ -41,7 +41,7 @@ const Footer = () => { -
+
{intl.formatMessage({ id: 'Footer.Heading.About' })} @@ -66,7 +66,7 @@ const Footer = () => { label={intl.formatMessage({ id: 'Footer.Link.Contact' })} />
-
+
{intl.formatMessage({ id: 'Footer.Heading.OONIProbe' })} @@ -87,7 +87,7 @@ const Footer = () => { label={intl.formatMessage({ id: 'Footer.Link.API' })} />
-
+
{intl.formatMessage({ id: 'Footer.Heading.Updates' })} diff --git a/components/form/AdminNettestFields.tsx b/components/form/AdminNettestFields.tsx index dc82477..a9ce387 100644 --- a/components/form/AdminNettestFields.tsx +++ b/components/form/AdminNettestFields.tsx @@ -55,7 +55,7 @@ const AdminNettestFields = ({ name }: FieldsPropTypes) => {
diff --git a/components/login/LoginForm.tsx b/components/login/LoginForm.tsx index ad2eb24..23e749c 100644 --- a/components/login/LoginForm.tsx +++ b/components/login/LoginForm.tsx @@ -22,7 +22,6 @@ export const LoginForm = ({ onLogin, redirectTo }: LoginFormProps) => { const onSubmit = useCallback( (data: { email_address: string }) => { - console.log('data', data) const { email_address } = data const registerApi = async (email_address: string) => { try { diff --git a/components/v2/MetaTags.tsx b/components/v2/MetaTags.tsx index 7f2accf..425064a 100644 --- a/components/v2/MetaTags.tsx +++ b/components/v2/MetaTags.tsx @@ -31,7 +31,7 @@ const MetaTags = ({ {title && } {description && } @@ -49,7 +49,7 @@ const MetaTags = ({ diff --git a/lib/api.ts b/lib/api.ts index b75cfae..8f4bdaa 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -105,14 +105,14 @@ export const getList = (params = {}, config = {}) => { export const registerUser = async ( email_address: string, - redirectUrl = 'https://run.ooni.io', + redirectUrl = 'https://run.ooni.org', ) => { // current testing setup does not enable us to check process.env.NODE_ENV (it's set to production // in headless mode), therefore custom NEXT_PUBLIC_IS_TEST_ENV is used const redirectTo = process.env.NODE_ENV === 'development' || process.env.NEXT_PUBLIC_IS_TEST_ENV - ? 'https://run.test.ooni.org/' + ? 'https://run.test.ooni.org' : redirectUrl return await postAPI(apiEndpoints.USER_LOGIN, { email_address, diff --git a/package.json b/package.json index e3d44f9..e19975c 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,6 @@ "test": "playwright test", "build:analyze": "ANALYZE=true next build", "extract": "node ./scripts/extract '{pages,components,utils}/*.{js,ts,tsx}'", - "genurl": "babel-node scripts/genurl.js", "script:build-translations": "node ./scripts/build-translations.js" }, "msw": { diff --git a/scripts/genurl.js b/scripts/genurl.js deleted file mode 100644 index 9e34427..0000000 --- a/scripts/genurl.js +++ /dev/null @@ -1,16 +0,0 @@ -// This requires babel-cli -import * as fs from "fs" -import { getUniversalLink } from "../utils/links" - -const CSV_PATH = process.argv[2] || "../../test-lists/lists/global.csv" - -fs.readFile(CSV_PATH, "utf8", (err, data) => { - if (err) { - return console.log(err) - } - const urls = data - .split("\n") - .map((x) => x.split(",")[0]) - .filter((x) => x !== "url" && x !== "") - console.log(getUniversalLink(urls)) -}) diff --git a/utils/links.ts b/utils/links.ts index d01fe14..b22e598 100644 --- a/utils/links.ts +++ b/utils/links.ts @@ -1,9 +1,7 @@ import type { ParsedUrlQuery } from 'node:querystring' import mobileApp from '../config/mobileApp' -// export const baseURL = 'https://run.ooni.io' - -export const baseURL = 'https://run.test.ooni.org' +export const baseURL = 'https://run.ooni.org' export const minimumVersion = '1.2.0' @@ -31,10 +29,6 @@ export const getEncodedQuery = (query: ParsedUrlQuery) => { return uri } -export const getUniversalLink = (urls: string[]) => { - return `${baseURL}/${getUniversalQuery(urls)}` -} - export const getUniversalQuery = (urls: string[]) => { const testName = 'web_connectivity' const query: Query = { From 8a4d8739147309e2d009e7b2fa8fcc271292fe06 Mon Sep 17 00:00:00 2001 From: majakomel Date: Wed, 30 Oct 2024 11:56:33 +0100 Subject: [PATCH 5/5] Redirect to correct locale after login --- hooks/useUser.tsx | 18 +++++++++++------- lib/api.ts | 2 +- pages/login.tsx | 4 +++- utils/supportedLanguages.ts | 1 - 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/hooks/useUser.tsx b/hooks/useUser.tsx index 4097149..c676662 100644 --- a/hooks/useUser.tsx +++ b/hooks/useUser.tsx @@ -68,19 +68,23 @@ export const UserProvider = ({ children }: UserProviderProps) => { .finally(() => setLoading(false)) } - const afterLogin = useCallback(() => { - setTimeout(() => { - router.push('/create') - }, 2000) - }, [router]) + const afterLogin = useCallback( + (redirectTo: string) => { + const locale = new URL(redirectTo)?.pathname || '' + setTimeout(() => { + router.push(`${locale}/create`) + }, 2000) + }, + [router], + ) // biome-ignore lint/correctness/useExhaustiveDependencies: useEffect(() => { if (token && router.pathname === '/login') { loginUser(token) - .then(() => { + .then((data) => { getUser() - afterLogin() + afterLogin(data?.redirect_to) }) .catch((e) => { console.log(e) diff --git a/lib/api.ts b/lib/api.ts index 8f4bdaa..136ebd4 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -112,7 +112,7 @@ export const registerUser = async ( const redirectTo = process.env.NODE_ENV === 'development' || process.env.NEXT_PUBLIC_IS_TEST_ENV - ? 'https://run.test.ooni.org' + ? `https://run.test.ooni.org${new URL(redirectUrl)?.pathname || ''}` : redirectUrl return await postAPI(apiEndpoints.USER_LOGIN, { email_address, diff --git a/pages/login.tsx b/pages/login.tsx index ee3b9ca..7e237bf 100644 --- a/pages/login.tsx +++ b/pages/login.tsx @@ -16,7 +16,9 @@ const Login = () => { const [submitted, setSubmitted] = useState(false) const redirectTo = - typeof window !== 'undefined' ? window.location.origin : undefined + typeof window !== 'undefined' + ? `${window.location.origin}/${intl.locale}` + : undefined const { user, loading, error } = useUser() diff --git a/utils/supportedLanguages.ts b/utils/supportedLanguages.ts index f60f0de..a6f6165 100644 --- a/utils/supportedLanguages.ts +++ b/utils/supportedLanguages.ts @@ -4,7 +4,6 @@ const langs = [ 'de', 'el', 'es', - 'en', 'fa', 'fr', 'hi',