Translate the image crop dialog and verify-tutorial goal label

The crop modal used in the verifier 'set up your organization'
onboarding step had hardcoded English controls (Reset, the
reposition/zoom hint, Cancel, Processing, Apply Crop, and the default
title). Route them through a new top-level imageCrop namespace and
add translations for all sixteen locales.

The VerifyTutorial demo card's 'of … goal' label was also hardcoded;
reuse the existing campaignsDetail.ofGoal key.
This commit is contained in:
lemon
2026-06-14 17:09:58 -07:00
parent 0486ff3c9f
commit 786938f9fc
18 changed files with 273 additions and 44 deletions
+8 -6
View File
@@ -1,4 +1,5 @@
import { useState, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import Cropper from 'react-easy-crop';
import type { Area, Point, Size } from 'react-easy-crop';
import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from '@/components/ui/dialog';
@@ -44,7 +45,8 @@ interface ImageCropDialogProps {
onError?: (error: unknown) => void;
}
export function ImageCropDialog({ open, imageSrc, aspect, title = 'Crop Image', showCircleGuide, maxOutputSize, onCancel, onCrop, onError }: ImageCropDialogProps) {
export function ImageCropDialog({ open, imageSrc, aspect, title, showCircleGuide, maxOutputSize, onCancel, onCrop, onError }: ImageCropDialogProps) {
const { t } = useTranslation();
const [crop, setCrop] = useState<Point>({ x: 0, y: 0 });
const [zoom, setZoom] = useState(1);
const [croppedAreaPixels, setCroppedAreaPixels] = useState<Area | null>(null);
@@ -87,7 +89,7 @@ export function ImageCropDialog({ open, imageSrc, aspect, title = 'Crop Image',
<Dialog open={open} onOpenChange={(v) => { if (!v) onCancel(); }}>
<DialogContent className="sm:max-w-lg p-0 gap-0 overflow-hidden">
<DialogHeader className="px-5 pt-5 pb-3">
<DialogTitle className="text-base">{title}</DialogTitle>
<DialogTitle className="text-base">{title ?? t('imageCrop.title')}</DialogTitle>
</DialogHeader>
{/* Cropper area */}
@@ -138,18 +140,18 @@ export function ImageCropDialog({ open, imageSrc, aspect, title = 'Crop Image',
<div className="flex justify-between items-center">
<Button variant="ghost" size="sm" onClick={handleReset} className="text-xs gap-1.5 h-8">
<RotateCcw className="size-3" />
Reset
{t('imageCrop.reset')}
</Button>
<p className="text-xs text-muted-foreground">Drag to reposition · Pinch or scroll to zoom</p>
<p className="text-xs text-muted-foreground">{t('imageCrop.hint')}</p>
</div>
</div>
<DialogFooter className="px-5 pb-5 gap-2 flex-row justify-end">
<Button variant="outline" onClick={onCancel} disabled={isProcessing} size="sm">
Cancel
{t('imageCrop.cancel')}
</Button>
<Button onClick={handleConfirm} disabled={isProcessing} size="sm">
{isProcessing ? 'Processing' : 'Apply Crop'}
{isProcessing ? t('imageCrop.processing') : t('imageCrop.apply')}
</Button>
</DialogFooter>
</DialogContent>
@@ -299,7 +299,7 @@ function DemoStage({
</div>
<div className="flex items-baseline justify-between gap-2 text-sm">
<span className="font-semibold">{DEMO_CAMPAIGN.raisedLabel}</span>
<span className="text-muted-foreground">of {DEMO_CAMPAIGN.goalLabel} goal</span>
<span className="text-muted-foreground">{t('campaignsDetail.ofGoal', { amount: DEMO_CAMPAIGN.goalLabel })}</span>
</div>
</div>
+20 -3
View File
@@ -48,6 +48,14 @@
"countryNoResults": "لم يتم العثور على بلدان.",
"countryGlobal": "عالمي"
},
"imageCrop": {
"title": "اقتصاص الصورة",
"reset": "إعادة تعيين",
"hint": "اسحب لإعادة الوضع · اقرص أو مرّر للتكبير",
"cancel": "إلغاء",
"processing": "جارٍ المعالجة…",
"apply": "تطبيق الاقتصاص"
},
"translate": {
"translate": "ترجمة",
"translating": "جارٍ الترجمة…",
@@ -1104,9 +1112,18 @@
"title": "كيفية توثيق حملة",
"lede": "بيانك منشور الآن. إليك كيف توثّق حملة تثق بها — يكفي نقرتان من أي بطاقة حملة.",
"steps": {
"open": { "title": "افتح القائمة", "body": "في أي بطاقة حملة، انقر على زر النقاط الثلاث في الزاوية العلوية اليمنى من اللافتة." },
"verify": { "title": "اختر \"وثّق هذه الحملة\"", "body": "تكشف القائمة عن إجراء التوثيق — وهو مرئي فقط للمشرفين والمُوثِّقين مثلك." },
"confirm": { "title": "أكِّد وانتهيت", "body": "أقرّ بأن الحملة أصلية. تنضم شارتك إلى البطاقة ليعلم المتبرعون أنك تقف خلفها." }
"open": {
"title": "افتح القائمة",
"body": "في أي بطاقة حملة، انقر على زر النقاط الثلاث في الزاوية العلوية اليمنى من اللافتة."
},
"verify": {
"title": "اختر \"وثّق هذه الحملة\"",
"body": "تكشف القائمة عن إجراء التوثيق — وهو مرئي فقط للمشرفين والمُوثِّقين مثلك."
},
"confirm": {
"title": "أكِّد وانتهيت",
"body": "أقرّ بأن الحملة أصلية. تنضم شارتك إلى البطاقة ليعلم المتبرعون أنك تقف خلفها."
}
},
"demo": {
"menuVerify": "وثّق هذه الحملة"
+8
View File
@@ -53,6 +53,14 @@
"countryNoResults": "No countries found.",
"countryGlobal": "Global"
},
"imageCrop": {
"title": "Crop Image",
"reset": "Reset",
"hint": "Drag to reposition · Pinch or scroll to zoom",
"cancel": "Cancel",
"processing": "Processing…",
"apply": "Apply Crop"
},
"translate": {
"translate": "Translate",
"translating": "Translating…",
+8
View File
@@ -52,6 +52,14 @@
"countryNoResults": "No se encontraron países.",
"countryGlobal": "Global"
},
"imageCrop": {
"title": "Recortar imagen",
"reset": "Restablecer",
"hint": "Arrastra para reposicionar · Pellizca o desplaza para hacer zoom",
"cancel": "Cancelar",
"processing": "Procesando…",
"apply": "Aplicar recorte"
},
"translate": {
"translate": "Traducir",
"translating": "Traduciendo…",
+21 -4
View File
@@ -52,6 +52,14 @@
"countryNoResults": "هیچ کشوری پیدا نشد.",
"countryGlobal": "جهانی"
},
"imageCrop": {
"title": "برش تصویر",
"reset": "بازنشانی",
"hint": "برای جابه‌جایی بکشید · برای بزرگ‌نمایی پینچ یا اسکرول کنید",
"cancel": "لغو",
"processing": "در حال پردازش…",
"apply": "اعمال برش"
},
"translate": {
"translate": "ترجمه",
"translating": "در حال ترجمه…",
@@ -1114,9 +1122,18 @@
"title": "چگونه یک کمپین را تأیید کنیم",
"lede": "بیانیهٔ شما فعال است. در اینجا می‌بینید که چگونه کمپینی را که به آن اعتماد دارید تأیید کنید — تنها با دو ضربه از روی هر کارت کمپین انجام می‌شود.",
"steps": {
"open": { "title": "منو را باز کنید", "body": "روی هر کارت کمپین، دکمهٔ سه‌نقطه را در گوشهٔ بالا سمت راست بنر لمس کنید." },
"verify": { "title": "گزینهٔ \"این کمپین را تأیید کنید\" را انتخاب کنید", "body": "منو یک کنش تأیید را نمایش می‌دهد — که فقط برای ناظران و تأییدکنندگانی مانند شما قابل مشاهده است." },
"confirm": { "title": "تأیید کنید و کار تمام است", "body": "گواهی دهید که کمپین معتبر است. نشان شما به کارت افزوده می‌شود تا اهداکنندگان بدانند که شما پشتیبان آن هستید." }
"open": {
"title": "منو را باز کنید",
"body": "روی هر کارت کمپین، دکمهٔ سه‌نقطه را در گوشهٔ بالا سمت راست بنر لمس کنید."
},
"verify": {
"title": "گزینهٔ \"این کمپین را تأیید کنید\" را انتخاب کنید",
"body": "منو یک کنش تأیید را نمایش می‌دهد — که فقط برای ناظران و تأییدکنندگانی مانند شما قابل مشاهده است."
},
"confirm": {
"title": "تأیید کنید و کار تمام است",
"body": "گواهی دهید که کمپین معتبر است. نشان شما به کارت افزوده می‌شود تا اهداکنندگان بدانند که شما پشتیبان آن هستید."
}
},
"demo": {
"menuVerify": "این کمپین را تأیید کنید"
@@ -1867,7 +1884,7 @@
"moderator": "ناظر",
"mod": "ناظر",
"ended": "پایان‌یافته",
"pledged": "تعهد شد"
"pledged": "تعهد شد"
},
"imageMenu": {
"upload": "بارگذاری فایل",
+8
View File
@@ -51,6 +51,14 @@
"countryNoResults": "Aucun pays trouvé.",
"countryGlobal": "Mondial"
},
"imageCrop": {
"title": "Recadrer limage",
"reset": "Réinitialiser",
"hint": "Faites glisser pour repositionner · Pincez ou faites défiler pour zoomer",
"cancel": "Annuler",
"processing": "Traitement…",
"apply": "Appliquer le recadrage"
},
"translate": {
"translate": "Traduire",
"translating": "Traduction…",
+20 -3
View File
@@ -52,6 +52,14 @@
"countryNoResults": "कोई देश नहीं मिला.",
"countryGlobal": "वैश्विक"
},
"imageCrop": {
"title": "छवि क्रॉप करें",
"reset": "रीसेट करें",
"hint": "स्थिति बदलने के लिए खींचें · ज़ूम के लिए पिंच या स्क्रॉल करें",
"cancel": "रद्द करें",
"processing": "प्रोसेस हो रहा है…",
"apply": "क्रॉप लागू करें"
},
"translate": {
"translate": "अनुवाद करें",
"translating": "अनुवाद हो रहा है…",
@@ -1556,9 +1564,18 @@
"title": "किसी अभियान को कैसे सत्यापित करें",
"lede": "आपका वक्तव्य लाइव है। जिस अभियान पर आप भरोसा करते हैं उसकी पुष्टि करने का तरीका यहाँ है — किसी भी अभियान कार्ड से बस दो टैप में हो जाता है।",
"steps": {
"open": { "title": "मेनू खोलें", "body": "किसी भी अभियान कार्ड पर, बैनर के ऊपरी-दाएँ कोने में तीन-बिंदु वाले बटन पर टैप करें।" },
"verify": { "title": "\"इस अभियान को सत्यापित करें\" चुनें", "body": "मेनू एक सत्यापन क्रिया दिखाता है — जो केवल आपके जैसे मॉडरेटर और सत्यापनकर्ताओं को ही दिखती है।" },
"confirm": { "title": "पुष्टि करें और हो गया", "body": "प्रमाणित करें कि अभियान प्रामाणिक है। आपका बैज कार्ड में जुड़ जाता है ताकि दानदाताओं को पता चले कि आप इसके पीछे खड़े हैं।" }
"open": {
"title": "मेनू खोलें",
"body": "किसी भी अभियान कार्ड पर, बैनर के ऊपरी-दाएँ कोने में तीन-बिंदु वाले बटन पर टैप करें।"
},
"verify": {
"title": "\"इस अभियान को सत्यापित करें\" चुनें",
"body": "मेनू एक सत्यापन क्रिया दिखाता है — जो केवल आपके जैसे मॉडरेटर और सत्यापनकर्ताओं को ही दिखती है।"
},
"confirm": {
"title": "पुष्टि करें और हो गया",
"body": "प्रमाणित करें कि अभियान प्रामाणिक है। आपका बैज कार्ड में जुड़ जाता है ताकि दानदाताओं को पता चले कि आप इसके पीछे खड़े हैं।"
}
},
"demo": {
"menuVerify": "इस अभियान को सत्यापित करें"
+20 -3
View File
@@ -52,6 +52,14 @@
"countryNoResults": "Tidak ada negara yang ditemukan.",
"countryGlobal": "Global"
},
"imageCrop": {
"title": "Pangkas Gambar",
"reset": "Atur ulang",
"hint": "Seret untuk memindahkan · Cubit atau gulir untuk memperbesar",
"cancel": "Batal",
"processing": "Memproses…",
"apply": "Terapkan Pangkasan"
},
"translate": {
"translate": "Terjemahkan",
"translating": "Menerjemahkan…",
@@ -1556,9 +1564,18 @@
"title": "Cara memverifikasi kampanye",
"lede": "Pernyataan Anda sudah aktif. Berikut cara menjamin kampanye yang Anda percaya — cukup dua ketukan dari kartu kampanye mana pun.",
"steps": {
"open": { "title": "Buka menu", "body": "Pada kartu kampanye mana pun, ketuk tombol tiga titik di sudut kanan atas banner." },
"verify": { "title": "Pilih \"Verifikasi kampanye ini\"", "body": "Menu menampilkan aksi verifikasi — hanya terlihat oleh moderator dan verifikator seperti Anda." },
"confirm": { "title": "Konfirmasi & selesai", "body": "Tegaskan bahwa kampanye ini autentik. Lencana Anda akan muncul di kartu sehingga para donatur tahu Anda mendukungnya." }
"open": {
"title": "Buka menu",
"body": "Pada kartu kampanye mana pun, ketuk tombol tiga titik di sudut kanan atas banner."
},
"verify": {
"title": "Pilih \"Verifikasi kampanye ini\"",
"body": "Menu menampilkan aksi verifikasi — hanya terlihat oleh moderator dan verifikator seperti Anda."
},
"confirm": {
"title": "Konfirmasi & selesai",
"body": "Tegaskan bahwa kampanye ini autentik. Lencana Anda akan muncul di kartu sehingga para donatur tahu Anda mendukungnya."
}
},
"demo": {
"menuVerify": "Verifikasi kampanye ini"
+21 -4
View File
@@ -52,6 +52,14 @@
"countryNoResults": "រកមិនឃើញប្រទេសទេ។",
"countryGlobal": "សកល"
},
"imageCrop": {
"title": "កាត់រូបភាព",
"reset": "កំណត់ឡើងវិញ",
"hint": "អូសដើម្បីផ្លាស់ទីតាំង · ច្បិច ឬរំកិលដើម្បីពង្រីក",
"cancel": "បោះបង់",
"processing": "កំពុងដំណើរការ…",
"apply": "អនុវត្តការកាត់"
},
"translate": {
"translate": "បកប្រែ",
"translating": "កំពុងបកប្រែ…",
@@ -1114,9 +1122,18 @@
"title": "របៀបផ្ទៀងផ្ទាត់យុទ្ធនាការ",
"lede": "សេចក្តីថ្លែងការណ៍របស់អ្នកកំពុងដំណើរការ។ នេះជារបៀបធានាដល់យុទ្ធនាការដែលអ្នកទុកចិត្ត — វាត្រូវការតែការប៉ះពីរដងពីកាតយុទ្ធនាការណាមួយប៉ុណ្ណោះ។",
"steps": {
"open": { "title": "បើកម៉ឺនុយ", "body": "នៅលើកាតយុទ្ធនាការណាមួយ សូមប៉ះប៊ូតុងចំណុចបីនៅជ្រុងខាងស្តាំផ្នែកខាងលើនៃផ្ទាំងបដា។" },
"verify": { "title": "ជ្រើសរើស \"ផ្ទៀងផ្ទាត់យុទ្ធនាការនេះ\"", "body": "ម៉ឺនុយនឹងបង្ហាញសកម្មភាពផ្ទៀងផ្ទាត់ — មើលឃើញតែសម្រាប់អ្នកសម្របសម្រួល និងអ្នកផ្ទៀងផ្ទាត់ដូចជាអ្នកប៉ុណ្ណោះ។" },
"confirm": { "title": "បញ្ជាក់ ហើយអ្នកបានបញ្ចប់", "body": "បញ្ជាក់ថាយុទ្ធនាការនេះពិតប្រាកដ។ ផ្លាកសញ្ញារបស់អ្នកនឹងភ្ជាប់ទៅកាត ដើម្បីឱ្យអ្នកបរិច្ចាគដឹងថាអ្នកគាំទ្រវា។" }
"open": {
"title": "បើកម៉ឺនុយ",
"body": "នៅលើកាតយុទ្ធនាការណាមួយ សូមប៉ះប៊ូតុងចំណុចបីនៅជ្រុងខាងស្តាំផ្នែកខាងលើនៃផ្ទាំងបដា។"
},
"verify": {
"title": "ជ្រើសរើស \"ផ្ទៀងផ្ទាត់យុទ្ធនាការនេះ\"",
"body": "ម៉ឺនុយនឹងបង្ហាញសកម្មភាពផ្ទៀងផ្ទាត់ — មើលឃើញតែសម្រាប់អ្នកសម្របសម្រួល និងអ្នកផ្ទៀងផ្ទាត់ដូចជាអ្នកប៉ុណ្ណោះ។"
},
"confirm": {
"title": "បញ្ជាក់ ហើយអ្នកបានបញ្ចប់",
"body": "បញ្ជាក់ថាយុទ្ធនាការនេះពិតប្រាកដ។ ផ្លាកសញ្ញារបស់អ្នកនឹងភ្ជាប់ទៅកាត ដើម្បីឱ្យអ្នកបរិច្ចាគដឹងថាអ្នកគាំទ្រវា។"
}
},
"demo": {
"menuVerify": "ផ្ទៀងផ្ទាត់យុទ្ធនាការនេះ"
@@ -1867,7 +1884,7 @@
"moderator": "អ្នកសម្របសម្រួល",
"mod": "អ្នកសម្របសម្រួល",
"ended": "បានបញ្ចប់",
"pledged": "បានសន្យា"
"pledged": "បានសន្យា"
},
"imageMenu": {
"upload": "ផ្ទុកឯកសារឡើង",
+21 -4
View File
@@ -52,6 +52,14 @@
"countryNoResults": "هیڅ هیواد ونه موندل شو.",
"countryGlobal": "نړیوال"
},
"imageCrop": {
"title": "انځور کاٹل",
"reset": "بیا تنظیمول",
"hint": "د بیا ځای‌پرځای کولو لپاره یې کش کړئ · د لويولو لپاره ګوته ونیسئ یا سکرول کړئ",
"cancel": "لغوه کول",
"processing": "پروسس کیږي…",
"apply": "کاٹل پلي کول"
},
"translate": {
"translate": "ژباړل",
"translating": "ژباړل کېږي…",
@@ -1116,9 +1124,18 @@
"title": "د کمپاین تصدیق کولو څرنګوالی",
"lede": "ستاسو بیان فعال دی. دلته دا دی چې څنګه د هغه کمپاین ضمانت وکړئ چې تاسو پرې باور لرئ — دا د هر کمپاین له کارت څخه دوه ټک نیسي.",
"steps": {
"open": { "title": "مینو پرانیځئ", "body": "د هر کمپاین په کارت کې، د بینر په پورتنۍ ښۍ کونج کې د درې ټکو تڼۍ ټک کړئ." },
"verify": { "title": "\"دا کمپاین تصدیق کړئ\" غوره کړئ", "body": "مینو د تصدیق کړنه ښکاره کوي — یوازې تاسو په څېر اعتدال کوونکو او تصدیق کوونکو ته ښکاري." },
"confirm": { "title": "تایید کړئ او کار مو پای ته ورسېد", "body": "تصدیق کړئ چې کمپاین اصلي دی. ستاسو نښان د کارت سره یوځای کېږي ترڅو بسپنه ورکوونکي پوه شي چې تاسو یې ملاتړ کوئ." }
"open": {
"title": "مینو پرانیځئ",
"body": "د هر کمپاین په کارت کې، د بینر په پورتنۍ ښۍ کونج کې د درې ټکو تڼۍ ټک کړئ."
},
"verify": {
"title": "\"دا کمپاین تصدیق کړئ\" غوره کړئ",
"body": "مینو د تصدیق کړنه ښکاره کوي — یوازې تاسو په څېر اعتدال کوونکو او تصدیق کوونکو ته ښکاري."
},
"confirm": {
"title": "تایید کړئ او کار مو پای ته ورسېد",
"body": "تصدیق کړئ چې کمپاین اصلي دی. ستاسو نښان د کارت سره یوځای کېږي ترڅو بسپنه ورکوونکي پوه شي چې تاسو یې ملاتړ کوئ."
}
},
"demo": {
"menuVerify": "دا کمپاین تصدیق کړئ"
@@ -1869,7 +1886,7 @@
"moderator": "څارونکی",
"mod": "څارونکی",
"ended": "پای ته رسیدلی",
"pledged": "ژمنه شوې"
"pledged": "ژمنه شوې"
},
"imageMenu": {
"upload": "فایل پورته کړئ",
+8
View File
@@ -52,6 +52,14 @@
"countryNoResults": "Nenhum país encontrado.",
"countryGlobal": "Global"
},
"imageCrop": {
"title": "Recortar imagem",
"reset": "Redefinir",
"hint": "Arraste para reposicionar · Pince ou role para aplicar zoom",
"cancel": "Cancelar",
"processing": "Processando…",
"apply": "Aplicar recorte"
},
"translate": {
"translate": "Traduzir",
"translating": "Traduzindo…",
+8
View File
@@ -52,6 +52,14 @@
"countryNoResults": "Страны не найдены.",
"countryGlobal": "Глобально"
},
"imageCrop": {
"title": "Обрезать изображение",
"reset": "Сбросить",
"hint": "Перетащите, чтобы переместить · Сведите пальцы или прокрутите для масштаба",
"cancel": "Отмена",
"processing": "Обработка…",
"apply": "Применить обрезку"
},
"translate": {
"translate": "Перевести",
"translating": "Перевод…",
+20 -3
View File
@@ -52,6 +52,14 @@
"countryNoResults": "Hapana nyika dzakawanikwa.",
"countryGlobal": "Pasi rose"
},
"imageCrop": {
"title": "Cheka Mufananidzo",
"reset": "Dzosera",
"hint": "Dhonza kuti uchinje nzvimbo · Manya kana kufambisa kuti ukurise",
"cancel": "Kanzura",
"processing": "Kuita basa…",
"apply": "Shandisa Kucheka"
},
"translate": {
"translate": "Dudzira",
"translating": "Kududzira…",
@@ -1116,9 +1124,18 @@
"title": "Mashandisirwo ekusimbisa mushandirapamwe",
"lede": "Chirevo chako chava pachena. Heano matanho ekutsigira mushandirapamwe waunovimba nawo — zvinotora kubata kaviri chete kubva pakadhi rapi nerapi remushandirapamwe.",
"steps": {
"open": { "title": "Vhura menyu", "body": "Pakadhi ripi neripi remushandirapamwe, baya bhatani remadhoti matatu kona yekumusoro kurudyi kwebhanga." },
"verify": { "title": "Sarudza \"Simbisa mushandirapamwe uyu\"", "body": "Menyu inoratidza chiito chekusimbisa — chinoonekwa chete nevatariri nevaongorori sewe." },
"confirm": { "title": "Simbisa uye wapedza", "body": "Pupura kuti mushandirapamwe ndewechokwadi. Bheji rako rinobatana nekadhi kuti vanopa vazive kuti unowutsigira." }
"open": {
"title": "Vhura menyu",
"body": "Pakadhi ripi neripi remushandirapamwe, baya bhatani remadhoti matatu kona yekumusoro kurudyi kwebhanga."
},
"verify": {
"title": "Sarudza \"Simbisa mushandirapamwe uyu\"",
"body": "Menyu inoratidza chiito chekusimbisa — chinoonekwa chete nevatariri nevaongorori sewe."
},
"confirm": {
"title": "Simbisa uye wapedza",
"body": "Pupura kuti mushandirapamwe ndewechokwadi. Bheji rako rinobatana nekadhi kuti vanopa vazive kuti unowutsigira."
}
},
"demo": {
"menuVerify": "Simbisa mushandirapamwe uyu"
+21 -4
View File
@@ -52,6 +52,14 @@
"countryNoResults": "Hakuna nchi zilizopatikana.",
"countryGlobal": "Kimataifa"
},
"imageCrop": {
"title": "Punguza Picha",
"reset": "Weka upya",
"hint": "Buruta kuhamisha · Banza au sogeza ili kukuza",
"cancel": "Ghairi",
"processing": "Inachakata…",
"apply": "Tumia Upunguzaji"
},
"translate": {
"translate": "Tafsiri",
"translating": "Inatafsiri…",
@@ -1553,11 +1561,20 @@
"tutorial": {
"eyebrow": "Sasa wewe ni mthibitishaji",
"title": "Jinsi ya kuthibitisha kampeni",
"lede": "Taarifa yako iko hewani. Hivi ndivyo unavyoweza kuiunga mkono kampeni unayoiamini \u2014 inachukua mibofyo miwili kutoka kwa kadi yoyote ya kampeni.",
"lede": "Taarifa yako iko hewani. Hivi ndivyo unavyoweza kuiunga mkono kampeni unayoiamini inachukua mibofyo miwili kutoka kwa kadi yoyote ya kampeni.",
"steps": {
"open": { "title": "Fungua menyu", "body": "Kwenye kadi yoyote ya kampeni, gusa kitufe cha nukta tatu kwenye kona ya juu kulia ya bango." },
"verify": { "title": "Chagua \"Thibitisha kampeni hii\"", "body": "Menyu hufunua kitendo cha kuthibitisha \u2014 kinachoonekana kwa wasimamizi na wathibitishaji kama wewe pekee." },
"confirm": { "title": "Thibitisha na umemaliza", "body": "Shuhudia kuwa kampeni ni halisi. Beji yako huungana na kadi ili wafadhili wajue unaiunga mkono." }
"open": {
"title": "Fungua menyu",
"body": "Kwenye kadi yoyote ya kampeni, gusa kitufe cha nukta tatu kwenye kona ya juu kulia ya bango."
},
"verify": {
"title": "Chagua \"Thibitisha kampeni hii\"",
"body": "Menyu hufunua kitendo cha kuthibitisha — kinachoonekana kwa wasimamizi na wathibitishaji kama wewe pekee."
},
"confirm": {
"title": "Thibitisha na umemaliza",
"body": "Shuhudia kuwa kampeni ni halisi. Beji yako huungana na kadi ili wafadhili wajue unaiunga mkono."
}
},
"demo": {
"menuVerify": "Thibitisha kampeni hii"
+20 -3
View File
@@ -51,6 +51,14 @@
"countryNoResults": "Ülke bulunamadı.",
"countryGlobal": "Küresel"
},
"imageCrop": {
"title": "Görseli Kırp",
"reset": "Sıfırla",
"hint": "Yeniden konumlandırmak için sürükleyin · Yakınlaştırmak için sıkıştırın veya kaydırın",
"cancel": "İptal",
"processing": "İşleniyor…",
"apply": "Kırpmayı Uygula"
},
"translate": {
"translate": "Çevir",
"translating": "Çevriliyor…",
@@ -1557,9 +1565,18 @@
"title": "Bir kampanya nasıl doğrulanır",
"lede": "Beyanınız yayında. Güvendiğiniz bir kampanyaya nasıl kefil olacağınız işte burada — herhangi bir kampanya kartından iki dokunuşla yapılır.",
"steps": {
"open": { "title": "Menüyü açın", "body": "Herhangi bir kampanya kartında, afişin sağ üst köşesindeki üç nokta düğmesine dokunun." },
"verify": { "title": "\"Bu kampanyayı doğrula\" seçeneğini seçin", "body": "Menüde bir doğrulama işlemi belirir — yalnızca sizin gibi moderatörler ve doğrulayıcılar tarafından görülebilir." },
"confirm": { "title": "Onaylayın ve işlem tamam", "body": "Kampanyanın gerçek olduğunu teyit edin. Rozetiniz kartta yerini alır, böylece bağışçılar arkasında durduğunuzu bilir." }
"open": {
"title": "Menüyü açın",
"body": "Herhangi bir kampanya kartında, afişin sağ üst köşesindeki üç nokta düğmesine dokunun."
},
"verify": {
"title": "\"Bu kampanyayı doğrula\" seçeneğini seçin",
"body": "Menüde bir doğrulama işlemi belirir — yalnızca sizin gibi moderatörler ve doğrulayıcılar tarafından görülebilir."
},
"confirm": {
"title": "Onaylayın ve işlem tamam",
"body": "Kampanyanın gerçek olduğunu teyit edin. Rozetiniz kartta yerini alır, böylece bağışçılar arkasında durduğunuzu bilir."
}
},
"demo": {
"menuVerify": "Bu kampanyayı doğrula"
+20 -3
View File
@@ -52,6 +52,14 @@
"countryNoResults": "找不到國家。",
"countryGlobal": "全球"
},
"imageCrop": {
"title": "裁剪圖片",
"reset": "重設",
"hint": "拖曳以重新定位 · 雙指捏合或捲動以縮放",
"cancel": "取消",
"processing": "處理中…",
"apply": "套用裁剪"
},
"translate": {
"translate": "翻譯",
"translating": "正在翻譯…",
@@ -1116,9 +1124,18 @@
"title": "如何驗證一個專案",
"lede": "你的聲明已上線。以下說明如何為你信任的專案背書——從任何專案卡片只需點兩下即可完成。",
"steps": {
"open": { "title": "開啟選單", "body": "在任何專案卡片上,點選橫幅右上角的三點按鈕。" },
"verify": { "title": "選擇「驗證此活動」", "body": "選單會顯示驗證操作——只有像你這樣的版主和驗證者才看得到。" },
"confirm": { "title": "確認後即完成", "body": "證明這個專案是真實的。你的徽章會加入卡片,讓捐款者知道你為它背書。" }
"open": {
"title": "開啟選單",
"body": "在任何專案卡片上,點選橫幅右上角的三點按鈕。"
},
"verify": {
"title": "選擇「驗證此活動」",
"body": "選單會顯示驗證操作——只有像你這樣的版主和驗證者才看得到。"
},
"confirm": {
"title": "確認後即完成",
"body": "證明這個專案是真實的。你的徽章會加入卡片,讓捐款者知道你為它背書。"
}
},
"demo": {
"menuVerify": "驗證此活動"
+20 -3
View File
@@ -52,6 +52,14 @@
"countryNoResults": "未找到国家。",
"countryGlobal": "全球"
},
"imageCrop": {
"title": "裁剪图片",
"reset": "重置",
"hint": "拖动以重新定位 · 双指捏合或滚动以缩放",
"cancel": "取消",
"processing": "处理中…",
"apply": "应用裁剪"
},
"translate": {
"translate": "翻译",
"translating": "正在翻译…",
@@ -1116,9 +1124,18 @@
"title": "如何验证一个活动",
"lede": "你的声明已生效。下面教你如何为信任的活动背书——从任意活动卡片只需两步即可完成。",
"steps": {
"open": { "title": "打开菜单", "body": "在任意活动卡片上,点击横幅右上角的三点按钮。" },
"verify": { "title": "选择\"验证此活动\"", "body": "菜单会显示一个验证操作——仅对你这样的版主和验证者可见。" },
"confirm": { "title": "确认即可完成", "body": "证明该活动真实可信。你的徽章会出现在卡片上,让捐赠者知道你为它背书。" }
"open": {
"title": "打开菜单",
"body": "在任意活动卡片上,点击横幅右上角的三点按钮。"
},
"verify": {
"title": "选择\"验证此活动\"",
"body": "菜单会显示一个验证操作——仅对你这样的版主和验证者可见。"
},
"confirm": {
"title": "确认即可完成",
"body": "证明该活动真实可信。你的徽章会出现在卡片上,让捐赠者知道你为它背书。"
}
},
"demo": {
"menuVerify": "验证此活动"