/ constants.ts
constants.ts
  1  
  2  import { LanguageCode, Translation } from './types';
  3  
  4  export const TRANSLATIONS: Record<LanguageCode, Translation> = {
  5    en: {
  6      title: "安拍 Anpai",
  7      subtitle: "For whistleblowers. Works offline, zero analytics, removes EXIF.",
  8      openButton: "Open File",
  9      grayLabel: "Grayscale",
 10      noiseLabel: "Static Noise",
 11      blurTool: "Blur Tool",
 12      reset: "Reset All",
 13      save: "Save Image",
 14      saveVideo: "Record & Save Video",
 15      placeholder: "Drop image or video here. EXIF data is removed automatically.",
 16      statusNoImage: "Waiting for input...",
 17      statusReady: "Ready to process",
 18      statusProcessing: "Processing...",
 19      statusRecording: "Recording... (Do not switch tabs)",
 20      helpTitle: "Privacy & Security",
 21      helpContent: "This tool runs 100% in your browser. No data is sent to any server. When you save, all metadata (GPS, Camera Model, Time) is stripped. Filenames are randomized.",
 22      privacyNote: "Anonymize Images & Videos",
 23      download: "Download",
 24      glitchSection: "VFX / Glitch",
 25      scanlineLabel: "Scanlines",
 26      rgbShiftLabel: "RGB Shift",
 27      glitchIntensityLabel: "Displacement",
 28      videoControls: "Video Controls",
 29      statusLabel: "Status",
 30      uploadPrompt: "Upload an image or video to access privacy tools and glitch effects.",
 31      anonymizeSection: "Anonymize",
 32      areasBlurred: "areas blurred",
 33      globalFiltersSection: "Global Filters",
 34      useControlsAbove: "Use Controls Above to Record",
 35      playPause: "Play/Pause",
 36      stopRec: "Stop Rec",
 37      record: "Record",
 38      audioOff: "Audio OFF",
 39      audioOn: "Audio ON",
 40      privacyTitle: "Privacy First",
 41      privacyMessage: "Anpai works offline, anonymously, without any analytics or tracking. The code is fully open source, which you can verify yourself.",
 42      radicleLink: "You can review the code on Radicle, a decentralized Git repository.",
 43      noUploads: "No Server Uploads",
 44      exifStripped: "EXIF/Metadata Stripped",
 45      runsOffline: "Runs Offline",
 46      install: "Install",
 47    },
 48    zh: {
 49      title: "安拍",
 50      subtitle: "为举报人设计。离线工作,零分析,自动删除EXIF。",
 51      openButton: "打开文件",
 52      grayLabel: "灰度",
 53      noiseLabel: "静态噪点",
 54      blurTool: "模糊工具",
 55      reset: "重置",
 56      save: "保存图片",
 57      saveVideo: "录制并保存视频",
 58      placeholder: "拖放图片或视频。自动清除EXIF元数据。",
 59      statusNoImage: "等待输入...",
 60      statusReady: "就绪",
 61      statusProcessing: "处理中...",
 62      statusRecording: "录制中... (请勿切换标签页)",
 63      helpTitle: "隐私与安全",
 64      helpContent: "此工具完全在浏览器中运行。没有数据发送到服务器。保存时,所有元数据(GPS、相机型号、时间)都会被删除。文件名是随机的。",
 65      privacyNote: "匿名化图片和视频",
 66      download: "下载",
 67      glitchSection: "特效 / 故障",
 68      scanlineLabel: "扫描线",
 69      rgbShiftLabel: "RGB位移",
 70      glitchIntensityLabel: "画面撕裂",
 71      videoControls: "视频控制",
 72      statusLabel: "状态",
 73      uploadPrompt: "上传图片或视频以使用隐私工具和故障特效。",
 74      anonymizeSection: "匿名化",
 75      areasBlurred: "个区域已模糊",
 76      globalFiltersSection: "全局滤镜",
 77      useControlsAbove: "使用上方控件录制",
 78      playPause: "播放/暂停",
 79      stopRec: "停止录制",
 80      record: "录制",
 81      audioOff: "音频关闭",
 82      audioOn: "音频开启",
 83      privacyTitle: "隐私优先",
 84      privacyMessage: "安拍完全离线运行,匿名且无任何分析或跟踪。代码完全开源,您可以自行验证。",
 85      radicleLink: "您可以在去中心化Git仓库Radicle上查看代码。",
 86      noUploads: "无服务器上传",
 87      exifStripped: "EXIF/元数据已删除",
 88      runsOffline: "离线运行",
 89      install: "安装",
 90    },
 91    ru: {
 92      title: "Anpai",
 93      subtitle: "Для информаторов. Оффлайн, без слежки, удаляет EXIF.",
 94      openButton: "Открыть файл",
 95      grayLabel: "ЧБ",
 96      noiseLabel: "Шум",
 97      blurTool: "Размытие",
 98      reset: "Сброс",
 99      save: "Сохранить",
100      saveVideo: "Записать видео",
101      placeholder: "Перетащите файл. EXIF удаляется автоматически.",
102      statusNoImage: "Ожидание...",
103      statusReady: "Готово",
104      statusProcessing: "Обработка...",
105      statusRecording: "Запись... (Не переключайте вкладки)",
106      helpTitle: "Конфиденциальность",
107      helpContent: "Работает в браузере. Данные не отправляются на сервер. Метаданные удаляются. Имя файла рандомизируется.",
108      privacyNote: "Анонимизация фото и видео",
109      download: "Скачать",
110      glitchSection: "Глитч эффекты",
111      scanlineLabel: "Сканлайны",
112      rgbShiftLabel: "RGB Сдвиг",
113      glitchIntensityLabel: "Смещение",
114      videoControls: "Управление видео",
115      statusLabel: "Статус",
116      uploadPrompt: "Загрузите изображение или видео для доступа к инструментам конфиденциальности.",
117      anonymizeSection: "Анонимизация",
118      areasBlurred: "областей размыто",
119      globalFiltersSection: "Глобальные фильтры",
120      useControlsAbove: "Используйте элементы управления выше для записи",
121      playPause: "Воспроизведение/Пауза",
122      stopRec: "Стоп запись",
123      record: "Записать",
124      audioOff: "Аудио ВЫКЛ",
125      audioOn: "Аудио ВКЛ",
126      privacyTitle: "Конфиденциальность прежде всего",
127      privacyMessage: "Anpai работает офлайн, анонимно, без аналитики и отслеживания. Код полностью открыт, вы можете проверить его сами.",
128      radicleLink: "Вы можете просмотреть код в Radicle, децентрализованном Git-репозитории.",
129      noUploads: "Нет загрузок на сервер",
130      exifStripped: "EXIF/метаданные удалены",
131      runsOffline: "Работает офлайн",
132      install: "Установить",
133    },
134    fa: {
135      title: "Anpai",
136      subtitle: "برای افشاگران. آفلاین، بدون ردیابی، حذف EXIF.",
137      openButton: "باز کردن فایل",
138      grayLabel: "خاکستری",
139      noiseLabel: "نویز",
140      blurTool: "ابزار محو",
141      reset: "بازنشانی",
142      save: "ذخیره امن",
143      saveVideo: "ضبط و ذخیره ویدیو",
144      placeholder: "فایل را اینجا رها کنید. داده‌های EXIF حذف می‌شوند.",
145      statusNoImage: "منتظر ورودی...",
146      statusReady: "آماده",
147      statusProcessing: "در حال پردازش...",
148      statusRecording: "در حال ضبط... (تب را تغییر ندهید)",
149      helpTitle: "حریم خصوصی",
150      helpContent: "این ابزار کاملاً در مرورگر شما اجرا می‌شود. هیچ داده‌ای ارسال نمی‌شود.",
151      privacyNote: "ناشناس‌سازی تصاویر و ویدیوها",
152      download: "دانلود",
153      glitchSection: "جلوه‌های ویژه",
154      scanlineLabel: "خطوط اسکن",
155      rgbShiftLabel: "تغییر RGB",
156      glitchIntensityLabel: "جابجایی",
157      videoControls: "کنترل‌های ویدیو",
158      statusLabel: "وضعیت",
159      uploadPrompt: "برای دسترسی به ابزارهای حریم خصوصی، تصویر یا ویدیو آپلود کنید.",
160      anonymizeSection: "ناشناس‌سازی",
161      areasBlurred: "ناحیه محو شده",
162      globalFiltersSection: "فیلترهای جهانی",
163      useControlsAbove: "از کنترل‌های بالا برای ضبط استفاده کنید",
164      playPause: "پخش/توقف",
165      stopRec: "توقف ضبط",
166      record: "ضبط",
167      audioOff: "صدا خاموش",
168      audioOn: "صدا روشن",
169      privacyTitle: "حریم خصوصی اول",
170      privacyMessage: "Anpai به صورت آفلاین، ناشناس و بدون تجزیه و تحلیل یا ردیابی کار می‌کند. کد کاملاً متن‌باز است و می‌توانید خودتان آن را بررسی کنید.",
171      radicleLink: "می‌توانید کد را در Radicle، یک مخزن Git غیرمتمرکز، بررسی کنید.",
172      noUploads: "بدون آپلود به سرور",
173      exifStripped: "EXIF/متادیتا حذف شده",
174      runsOffline: "آفلاین کار می‌کند",
175      install: "نصب",
176    },
177    ar: {
178      title: "Anpai",
179      subtitle: "للمبلغين. يعمل بدون إنترنت، يزيل EXIF.",
180      openButton: "فتح ملف",
181      grayLabel: "تدرج رمادي",
182      noiseLabel: "تشويش",
183      blurTool: "أداة الطمس",
184      reset: "إعادة تعيين",
185      save: "حفظ آمن",
186      saveVideo: "تسجيل وحفظ الفيديو",
187      placeholder: "أفلت الملف هنا. يتم إزالة بيانات EXIF تلقائيًا.",
188      statusNoImage: "بانتظار الإدخال...",
189      statusReady: "جاهز",
190      statusProcessing: "جارٍ المعالجة...",
191      statusRecording: "جارٍ التسجيل... (لا تغير علامة التبويب)",
192      helpTitle: "الخصوصية",
193      helpContent: "تعمل هذه الأداة 100% في متصفحك. لا يتم إرسال أي بيانات.",
194      privacyNote: "إخفاء هوية الصور والفيديوهات",
195      download: "تحميل",
196      glitchSection: "مؤثرات / خلل",
197      scanlineLabel: "خطوط المسح",
198      rgbShiftLabel: "إزاحة RGB",
199      glitchIntensityLabel: "تمزق الصورة",
200      videoControls: "تحكم الفيديو",
201      statusLabel: "الحالة",
202      uploadPrompt: "قم بتحميل صورة أو فيديو للوصول إلى أدوات الخصوصية.",
203      anonymizeSection: "إخفاء الهوية",
204      areasBlurred: "مناطق تم طمسها",
205      globalFiltersSection: "الفلاتر العامة",
206      useControlsAbove: "استخدم عناصر التحكم أعلاه للتسجيل",
207      playPause: "تشغيل/إيقاف مؤقت",
208      stopRec: "إيقاف التسجيل",
209      record: "تسجيل",
210      audioOff: "الصوت متوقف",
211      audioOn: "الصوت مفعّل",
212      privacyTitle: "الخصوصية أولاً",
213      privacyMessage: "يعمل Anpai دون اتصال بالإنترنت، بشكل مجهول، دون أي تحليلات أو تتبع. الكود مفتوح المصدر بالكامل، يمكنك التحقق بنفسك.",
214      radicleLink: "يمكنك مراجعة الكود على Radicle، مستودع Git لا مركزي.",
215      noUploads: "لا يوجد رفع إلى الخادم",
216      exifStripped: "تمت إزالة EXIF/البيانات الوصفية",
217      runsOffline: "يعمل بدون إنترنت",
218      install: "تثبيت",
219    },
220    tr: {
221      title: "Anpai",
222      subtitle: "İfşa edenler için. Çevrimdışı, izleme yok, EXIF siler.",
223      openButton: "Dosya Aç",
224      grayLabel: "Gri Tonlama",
225      noiseLabel: "Gürültü",
226      blurTool: "Bulanıklaştır",
227      reset: "Sıfırla",
228      save: "Kaydet",
229      saveVideo: "Kaydet ve İşle",
230      placeholder: "Dosyayı buraya bırakın. EXIF verileri otomatik silinir.",
231      statusNoImage: "Giriş bekleniyor...",
232      statusReady: "Hazır",
233      statusProcessing: "İşleniyor...",
234      statusRecording: "Kaydediliyor... (Sekmeyi değiştirmeyin)",
235      helpTitle: "Gizlilik",
236      helpContent: "Bu araç tamamen tarayıcınızda çalışır. Sunucuya veri gönderilmez.",
237      privacyNote: "Resimleri ve Videoları Anonimleştir",
238      download: "İndir",
239      glitchSection: "Görsel Efektler",
240      scanlineLabel: "Tarama Çizgileri",
241      rgbShiftLabel: "RGB Kayması",
242      glitchIntensityLabel: "Bozulma",
243      videoControls: "Video Kontrolleri",
244      statusLabel: "Durum",
245      uploadPrompt: "Gizlilik araçlarına erişmek için bir resim veya video yükleyin.",
246      anonymizeSection: "Anonimleştir",
247      areasBlurred: "alan bulanıklaştırıldı",
248      globalFiltersSection: "Genel Filtreler",
249      useControlsAbove: "Kaydetmek için yukarıdaki kontrolleri kullanın",
250      playPause: "Oynat/Duraklat",
251      stopRec: "Kaydı Durdur",
252      record: "Kaydet",
253      audioOff: "Ses KAPALI",
254      audioOn: "Ses AÇIK",
255      privacyTitle: "Gizlilik Öncelikli",
256      privacyMessage: "Anpai çevrimdışı, anonim olarak çalışır, hiçbir analiz veya izleme yapmaz. Kod tamamen açık kaynak, kendiniz doğrulayabilirsiniz.",
257      radicleLink: "Kodu merkeziyetsiz bir Git deposu olan Radicle'da inceleyebilirsiniz.",
258      noUploads: "Sunucuya Yükleme Yok",
259      exifStripped: "EXIF/Meta Veri Kaldırıldı",
260      runsOffline: "Çevrimdışı Çalışır",
261      install: "Yükle",
262    },
263    ko: {
264      title: "Anpai",
265      subtitle: "내부고발자를 위한 도구. 오프라인, EXIF 제거.",
266      openButton: "파일 열기",
267      grayLabel: "흑백",
268      noiseLabel: "노이즈",
269      blurTool: "블러 도구",
270      reset: "초기화",
271      save: "저장",
272      saveVideo: "녹화 및 저장",
273      placeholder: "파일을 드래그하세요. EXIF 데이터는 자동 삭제됩니다.",
274      statusNoImage: "대기 중...",
275      statusReady: "준비됨",
276      statusProcessing: "처리 중...",
277      statusRecording: "녹화 중... (탭을 전환하지 마세요)",
278      helpTitle: "개인정보 보호",
279      helpContent: "이 도구는 브라우저에서 100% 실행됩니다. 서버로 전송되지 않습니다.",
280      privacyNote: "이미지 및 비디오 익명화",
281      download: "다운로드",
282      glitchSection: "글리치 효과",
283      scanlineLabel: "스캔 라인",
284      rgbShiftLabel: "RGB 시프트",
285      glitchIntensityLabel: "화면 깨짐",
286      videoControls: "비디오 제어",
287      statusLabel: "상태",
288      uploadPrompt: "개인정보 보호 도구에 액세스하려면 이미지 또는 비디오를 업로드하세요.",
289      anonymizeSection: "익명화",
290      areasBlurred: "영역이 흐려짐",
291      globalFiltersSection: "전역 필터",
292      useControlsAbove: "녹화하려면 위의 컨트롤을 사용하세요",
293      playPause: "재생/일시정지",
294      stopRec: "녹화 중지",
295      record: "녹화",
296      audioOff: "오디오 끔",
297      audioOn: "오디오 켬",
298      privacyTitle: "개인정보 보호 우선",
299      privacyMessage: "Anpai는 오프라인, 익명으로 작동하며 분석이나 추적이 없습니다. 코드는 완전히 오픈 소스이므로 직접 확인할 수 있습니다.",
300      radicleLink: "탈중앙화 Git 저장소인 Radicle에서 코드를 검토할 수 있습니다.",
301      noUploads: "서버 업로드 없음",
302      exifStripped: "EXIF/메타데이터 제거됨",
303      runsOffline: "오프라인 작동",
304      install: "설치",
305    }
306  };
307  
308  export const SUPPORTED_LANGUAGES: { code: LanguageCode; label: string }[] = [
309    { code: 'en', label: 'English' },
310    { code: 'zh', label: '中文' },
311    { code: 'ru', label: 'Русский' },
312    { code: 'fa', label: 'فارسی' },
313    { code: 'ar', label: 'العربية' },
314    { code: 'tr', label: 'Türkçe' },
315    { code: 'ko', label: '한국어' },
316  ];