From 9d97ee849da9c50387e13ffa05399cbc159b1241 Mon Sep 17 00:00:00 2001 From: Abdulbasit <82594778+Abdulbasit0123@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:42:38 +0300 Subject: [PATCH 01/10] Resolved issue #965, completed Kurdish translations I completed the translation for Kurdish and fixed some typos of the already translated phrases and sentences. --- src/gui/src/i18n/translations/ku.js | 152 ++++++++++++++-------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/src/gui/src/i18n/translations/ku.js b/src/gui/src/i18n/translations/ku.js index 6038563e7..fe5527f04 100644 --- a/src/gui/src/i18n/translations/ku.js +++ b/src/gui/src/i18n/translations/ku.js @@ -36,12 +36,12 @@ const ku = { apply: "بەکارهێنان", ascending: "سەرووەی", associated_websites: "وێبسایتەکان پەیوەندیدار", - auto_arrange: "ڕیزکردنی ئۆتۆماتیکی", + auto_arrange: "ڕیزکردنی خودکار", background: "پاشبنەما", browse: "گەڕان", cancel: "ڕەتکردنەوە", center: "ناوەڕاست", - change_desktop_background: "گۆڕینی پاشبنەمای ڕوومیزی...", + change_desktop_background: "گۆڕینی پاشبنەمای ڕوومێزی...", change_email: "گۆڕینی ئیمەیل", change_language: "گۆڕینی زمان", change_password: "گۆڕینی وشەی تێپەڕ", @@ -49,9 +49,9 @@ const ku = { change_username: "گۆڕینی ناوی بەکارهێنەر", close: "داخستن", close_all_windows: "داخستنی هەموو پەنجەکان", - close_all_windows_confirm: "دڵنیایت کە ئەتەوێت هەموو پەنجەکان داخەیت؟", + close_all_windows_confirm: "دڵنیایت کە ئەتەوێت هەموو پەنجەرەکان داخەیت؟", close_all_windows_and_log_out: "داخستن و چوونە دەرەوە", - change_always_open_with: "ئەتەوێت هەمیشە ئەم جۆرە فایلە بکرێتەوە بە", + change_always_open_with: "دەتەوێت هەمیشە ئەم جۆرە فایلە بکرێتەوە بە", color: "ڕەنگ", confirm: "پشتڕاستکردنەوە", confirm_2fa_setup: "کۆدەکە زیادم کردووە بۆ وەرگرەری پشتڕاستکراوەکان", @@ -99,24 +99,24 @@ const ku = { clock_visible_hide: "شاردنەوە - هەمیشە شاردراوە", clock_visible_show: "پیشان - هەمیشە پیشاندراوە", clock_visible_auto: - "ئۆتۆ - بنەڕەت، تەنها پیشاندراوە لە دۆخەکانی شاشەی تەواو.", + "خودکار - بنەڕەت، تەنها پیشاندراوە لە دۆخەکانی شاشەی تەواو.", close_all: "داخستنەوەی هەموو", created: "دروستکراو", date_modified: "بەرواری گۆڕاوە", default: "بە ڕێگای بنەڕەت", delete: "سڕینەوە", delete_account: "سڕینەوەی هەژمار", - delete_permanently: "هەمی سڕینەوە", + delete_permanently: "سڕینەوەی یەکجاری", deleting_file: "سڕینەوەی %%", deploy_as_app: "دابەشکردن وەک ئەپ", descending: "نزەندەی", - desktop: "سەروروومیزی", + desktop: "سەروروومێزی", desktop_background_fit: "ڕێکخستن", developers: "پەرەپێدانەران", dir_published_as_website: `%strong% بەشکراوە بۆ:`, disable_2fa: "ناچالاککردنی 2FA", disable_2fa_confirm: "دڵنیایت کە ئەتەوێت 2FA ناچالاک بکەیت؟", - disable_2fa_instructions: "وشەی تێپەڕی نووسە بۆ ناچالاککردنی 2FA.", + disable_2fa_instructions: "وشەی تێپەڕی بنووسە بۆ ناچالاککردنی 2FA.", disassociate_dir: "جیاکردنەوەی ڕێکەوت", documents: "بەڵگەکان", dont_allow: "ڕێگەندان", @@ -149,7 +149,7 @@ const ku = { "تکایە فۆرمەکەی خوارەوە بەکاربە بۆ ناردنی فیدباک، لێدوان، و ڕاپۆرتی کێشەکان بۆ ئێمە.", feedback_sent_confirmation: "سوپاس بۆ پەیوەندی کردن. گەر ناونیشانی ئیمەیلەکەت هەیە، بە زووترین کات لەگەڵت پەیوەندیدەکەین.", - fit: "ڕێکخستن", + fit: "گونجاندن", folder: "فۆڵدەر", force_quit: "بەهێزەوە کوژاندنەوە", forgot_pass_c2a: "وشەی تێپەڕت لەبیرچووە؟", @@ -157,7 +157,7 @@ const ku = { general: "گشتی", get_a_copy_of_on_puter: `کۆپیێک وەرگرتنەوەی '%%' لە پوتەر.com!`, get_copy_link: "کۆپی بەستەر وەرگرتن", - hide_all_windows: "شاردنەوەی هەموو پەنجەکان", + hide_all_windows: "شاردنەوەی هەموو پەنجەرەکان", home: "ماڵەوە", html_document: "بەڵگەی HTML", hue: "هیو", @@ -170,16 +170,16 @@ const ku = { keep_in_taskbar: "ڕێپێدان لە تاکسبار", language: "زمان", license: "لایسەنس", - lightness: "رووناکی", + lightness: "ڕووناکی", link_copied: "بەستەر کۆپی کرا", loading: "بارکردنەوە", log_in: "چوونەژوورەوە", - log_into_another_account_anyway: "بە هەژماری دیگە هەرچۆنێکەوە چوونەژوورەوە", + log_into_another_account_anyway: "بە هەژماری دیکە هەرچۆنێکەوە چوونەژوورەوە", log_out: "چوونە دەرەوە", looks_good: "پەیوەندیدارە!", manage_sessions: "بەڕێوەبردنی دانیشتنەکان", menubar_style: "شێوازی منوبار", - menubar_style_desktop: "سەروروومیزی", + menubar_style_desktop: "سەروروومێزی", menubar_style_system: "سیستەم", menubar_style_window: "پەنجەرە", modified: "گۆڕاو", @@ -202,10 +202,10 @@ const ku = { no_dir_associated_with_site: "هیچ ڕێکەوتێک پەیوەندیداری ئەم ناونیشانە نییە.", no_websites_published: - "هێشتا هیچ وێبسایتێکت نەبڵاوکردووە. لەسەر فۆڵدەرەکە پەنجەکەی راستبکە بۆ دەستپێکردن.", + "هێشتا هیچ وێبسایتێکت بڵاونەکردووەتەوە. لەسەر فۆڵدەرەکە پەنجەکەی راستبکە بۆ دەستپێکردن.", ok: "باشە", open: "کردنەوە", - open_in_new_tab: "کردنەوە لە تابێکی نوێ", + open_in_new_tab: "کردنەوە لە پەڕێکی نوێ", open_in_new_window: "کردنەوە لە پەنجەرەیەکی نوێ", open_with: "کردنەوە بە", original_name: "ناوی ڕەسەن", @@ -248,27 +248,27 @@ const ku = { public: "گشتی", publish: "بڵاوکردنەوە", publish_as_website: "بڵاوکردنەوە وەک وێبسایت", - puter_description: `پوتەر پێشکەشکراوە بۆ پاراستنی تایبەتیە کەسایەتی، جێگایەکی ئازاد بۆ گەیاندنی هەموو فایلەکان، ئەپەکان، و یارییەکان لە هەر شوێنێک بێ هەموو کاتێک.`, + puter_description: `پوتەر پێشکەشکراوە بۆ پاراستنی تایبەتیە کەسییەکان، جێگایەکی ئازاد بۆ گەیاندنی هەموو فایلەکان، ئەپەکان، و یارییەکان لە هەر شوێنێک بێ هەموو کاتێک.`, reading_file: "خوێندنی %strong%", recent: "نوێترین", recommended: "پێشنیارکراوەکان", recover_password: "ڕێکخستنەوەی وشەی تێپەڕ", refer_friends_c2a: - "1 گیگابایت بۆ هەر هاوڕێک دەست بەرکە، پەیوەندیدانی هەژمارێک بۆ پوتەر دروست بکە و پشتڕاست بکە. هاوڕێتیش 1 گیگابایت وەرگرتن دەبێت!", - refer_friends_social_media_c2a: `1 گیگابایت پارێزگاکانی پوتەر.com بۆ هەر هاوڕێک بکە!`, + "1 گیگابایت بۆ هەر هاوڕێیەک دەست بەرکە، پەیوەندیدانی هەژمارێک بۆ پوتەر دروست بکە و پشتڕاست بکە. هاوڕێتیش 1 گیگابایت وەرگرتن دەبێت!", + refer_friends_social_media_c2a: `1 گیگابایت پارێزگاکانی پوتەر.com بۆ هەر هاوڕێیەک بکە!`, refresh: "بوژانەوە", release_address_confirmation: `دڵنیایت کە ئەتەوێت ئەم ناونیشانە بۆ هەڵگرتن؟`, - remove_from_taskbar: "لابردن لە تاکسبار", + remove_from_taskbar: "لابردن لە تاسکباڕ", rename: "ناونانەوە", repeat: "دووبارەکردنەوە", - replace: "لە نوێکردنەوە", - replace_all: "لە نوێکردنەوەی هەموو", + replace: "جێگرتنەوە", + replace_all: "جێگرتنەوەی هەموو", resend_confirmation_code: "دووبارە ناردنی کۆدی پشتڕاستکردنەوە", reset_colors: "ڕێکخستنی ڕەنگەکان", restart_puter_confirm: "دڵنیایت کە ئەتەوێت پوتەر دووبارە دەستپێبکەیت؟", restore: "گەڕاندنەوە", save: "پاشەکەوت", - saturation: "سەرەخۆشی", + saturation: "ڕەنگتێری", save_account: "پاشەکەوتکردنی هەژمار", save_account_to_get_copy_link: "تکایە هەژمارێک دروست بکە بۆ بەردەوامبوون.", save_account_to_publish: "تکایە هەژمارێک دروست بکە بۆ بەردەوامبوون.", @@ -295,20 +295,20 @@ const ku = { share_to: "هاوبەشکردن بۆ", share_with: "هاوبەشکردن بە:", shortcut_to: "شارتی بۆ", - show_all_windows: "پیشاندانی هەموو پەنجەکان", + show_all_windows: "پیشاندانی هەموو پەنجەرەکان", show_hidden: "پیشاندانی شاردراوەکان", sign_in_with_puter: "چوونەژوورەوە بە پوتەر", sign_up: "خۆتۆمارکردن", signing_in: "چوونەژوورەوە...", size: "قەبارە", skip: "هەڵگرتن", - something_went_wrong: "هەڵەیەکی رووی دا.", - sort_by: "ڕیزکردن بە", + something_went_wrong: "هەڵەیەکی ڕووی دا.", + sort_by: "ڕیزکردن بەپێی", start: "دەستپێکردن", status: "دۆخ", - storage_usage: "بەکاربردنی پارێزگا", + storage_usage: "بەکاربردنی بیرگە", storage_puter_used: "بەکاربردنی لەلایەن پوتەر", - taking_longer_than_usual: "کەمێک زیاتر کەوتە، تکایە چاوەڕوانبە...", + taking_longer_than_usual: "کەمێک زیاتر دەخایەنێت، تکایە چاوەڕوانبە...", task_manager: "بەڕێوەبەری کارەکان", taskmgr_header_name: "ناو", taskmgr_header_status: "دۆخ", @@ -359,8 +359,8 @@ const ku = { setup2fa_3_step_heading: "ناردنی کۆدی 6 ژمارە", setup2fa_4_step_heading: "کۆدی پشتڕاستکردنی نوێ پشکنین", setup2fa_4_instructions: ` - ئەم کۆدانە تەنها ڕێگا بۆ گەیشتنەوە بە هەژمارەکەت گەر تۆ موبایلەکەت - لەبیرچووی یاخود ناتوانی ئەپەکەت بەکاربەریت. + ئەم کۆدانە تەنها ڕێگایەکە بۆ گەیشتنەوە بە هەژمارەکەت گەر موبایلەکەت + لەبیرچوو یاخود نەتوانیت ئەپەکە بەکاربەریت. دڵنیابە کەیان لە شوێنێکی پاراستنەوەیەکان بنووسیت. `, setup2fa_5_step_heading: "پشتڕاستکردنی ڕێکخستنەوەی 2FA", @@ -373,7 +373,7 @@ const ku = { login2fa_otp_instructions: "کۆدی 6 ژمارەیە بنووسە لە ئەپەکەت.", login2fa_recovery_title: "کۆدی پشتڕاستکردنەوەیەک بنووسە", login2fa_recovery_instructions: - "یەکێک لە کۆدانە پشتڕاستکردنەوە بنووسە بۆ گەیشتنەوە بە هەژمارەکەت.", + "یەکێک لە کۆدەکانی پشتڕاستکردنەوە بنووسە بۆ گەیشتنەوە بە هەژمارەکەت.", login2fa_use_recovery_code: "بەکارهێنانی کۆدی پشتڕاستکردنەوە", login2fa_recovery_back: "گەڕانەوە", login2fa_recovery_placeholder: "XXXXXXXX", @@ -396,52 +396,52 @@ const ku = { // ---------------------------------------- // Missing translations: // ---------------------------------------- - "billing.change_payment_method": undefined, // In English: "Change" - "billing.cancel": undefined, // In English: "Cancel" - "billing.download_invoice": undefined, // In English: "Download" - "billing.payment_method": undefined, // In English: "Payment Method" - "billing.payment_method_updated": undefined, // In English: "Payment method updated!" - "billing.confirm_payment_method": undefined, // In English: "Confirm Payment Method" - "billing.payment_history": undefined, // In English: "Payment History" - "billing.refunded": undefined, // In English: "Refunded" - "billing.paid": undefined, // In English: "Paid" - "billing.ok": undefined, // In English: "OK" - "billing.resume_subscription": undefined, // In English: "Resume Subscription" - "billing.subscription_cancelled": undefined, // In English: "Your subscription has been canceled." - "billing.subscription_cancelled_description": undefined, // In English: "You will still have access to your subscription until the end of this billing period." - "billing.offering.free": undefined, // In English: "Free" - "billing.offering.pro": undefined, // In English: "Professional" - "billing.offering.business": undefined, // In English: "Business" - "billing.cloud_storage": undefined, // In English: "Cloud Storage" - "billing.ai_access": undefined, // In English: "AI Access" - "billing.bandwidth": undefined, // In English: "Bandwidth" - "billing.apps_and_games": undefined, // In English: "Apps & Games" - "billing.upgrade_to_pro": undefined, // In English: "Upgrade to %strong%" - "billing.switch_to": undefined, // In English: "Switch to %strong%" - "billing.payment_setup": undefined, // In English: "Payment Setup" - "billing.back": undefined, // In English: "Back" - "billing.you_are_now_subscribed_to": undefined, // In English: "You are now subscribed to %strong% tier." - "billing.you_are_now_subscribed_to_without_tier": undefined, // In English: "You are now subscribed" - "billing.subscription_cancellation_confirmation": undefined, // In English: "Are you sure you want to cancel your subscription?" - "billing.subscription_setup": undefined, // In English: "Subscription Setup" - "billing.cancel_it": undefined, // In English: "Cancel It" - "billing.keep_it": undefined, // In English: "Keep It" - "billing.subscription_resumed": undefined, // In English: "Your %strong% subscription has been resumed!" - "billing.upgrade_now": undefined, // In English: "Upgrade Now" - "billing.upgrade": undefined, // In English: "Upgrade" - "billing.currently_on_free_plan": undefined, // In English: "You are currently on the free plan." - "billing.download_receipt": undefined, // In English: "Download Receipt" - "billing.subscription_check_error": undefined, // In English: "A problem occurred while checking your subscription status." - "billing.email_confirmation_needed": undefined, // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." - "billing.sub_cancelled_but_valid_until": undefined, // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." - "billing.current_plan_until_end_of_period": undefined, // In English: "Your current plan until the end of this billing period." - "billing.current_plan": undefined, // In English: "Current plan" - "billing.cancelled_subscription_tier": undefined, // In English: "Cancelled Subscription (%%)" - "billing.manage": undefined, // In English: "Manage" - "billing.limited": undefined, // In English: "Limited" - "billing.expanded": undefined, // In English: "Expanded" - "billing.accelerated": undefined, // In English: "Accelerated" - "billing.enjoy_msg": undefined, // In English: "Enjoy %% of Cloud Storage plus other benefits." + "billing.change_payment_method": "بیگۆڕە", // In English: "Change" + "billing.cancel": "پاشگەزبوونەوە", // In English: "Cancel" + "billing.download_invoice": "داگرتن", // In English: "Download" + "billing.payment_method": "شێوازی پارەدان", // In English: "Payment Method" + "billing.payment_method_updated": "شێوازی پارەدان نوێکراوە!", // In English: "Payment method updated!" + "billing.confirm_payment_method": "پشتڕاستکردنەوەی شێوازی پارەدان", // In English: "Confirm Payment Method" + "billing.payment_history": "مێژووی مامەڵەکان", // In English: "Payment History" + "billing.refunded": "گەڕێندراوە", // In English: "Refunded" + "billing.paid": "پارە درا", // In English: "Paid" + "billing.ok": "باشە", // In English: "OK" + "billing.resume_subscription": "بەشداریکردنەوە", // In English: "Resume Subscription" + "billing.subscription_cancelled": "بەشداریکردنت هەڵوەشێندراوە.", // In English: "Your subscription has been canceled." + "billing.subscription_cancelled_description": ".هێشتا بەشداریکردنت ماوە، تا کۆتایی ئەو ماوەیەی پارەت دابوو", // In English: "You will still have access to your subscription until the end of this billing period." + "billing.offering.free": "بەخۆڕایی", // In English: "Free" + "billing.offering.pro": "پڕۆ", // In English: "Professional" + "billing.offering.business": "بزنس", // In English: "Business" + "billing.cloud_storage": "بیرگەی کڵاود", // In English: "Cloud Storage" + "billing.ai_access": "دەستگەیشتن بە ژیریی دەستکرد", // In English: "AI Access" + "billing.bandwidth": "باندویدث", // In English: "Bandwidth" + "billing.apps_and_games": "بەرنامە و یاری", // In English: "Apps & Games" + "billing.upgrade_to_pro": "بەرزکردنەوە بۆ %strong%", // In English: "Upgrade to %strong%" + "billing.switch_to": "گۆڕین بۆ %strong%", // In English: "Switch to %strong%" + "billing.payment_setup": "ڕێکخستنی پارەدان", // In English: "Payment Setup" + "billing.back": "گەڕانەوە", // In English: "Back" + "billing.you_are_now_subscribed_to": "تۆ ئێستا بەشداربووی لە ئاستی %strong%.", // In English: "You are now subscribed to %strong% tier." + "billing.you_are_now_subscribed_to_without_tier": "تۆ ئێستا بەشداربووی", // In English: "You are now subscribed" + "billing.subscription_cancellation_confirmation": "دڵنیایت دەتەوێت بەشداربوونت هەڵبوەشێنیتەوە؟", // In English: "Are you sure you want to cancel your subscription?" + "billing.subscription_setup": "ڕێکخستنی بەشداریکردن", // In English: "Subscription Setup" + "billing.cancel_it": "هەڵیبوەشێنەوە", // In English: "Cancel It" + "billing.keep_it": "بیهێڵەوە", // In English: "Keep It" + "billing.subscription_resumed": "بەشداریکردنت لە %strong% دەستیپێکردەوە!", // In English: "Your %strong% subscription has been resumed!" + "billing.upgrade_now": "ئێستا بەرزی بکەوە", // In English: "Upgrade Now" + "billing.upgrade": "بەرزکردنەوە", // In English: "Upgrade" + "billing.currently_on_free_plan": "لە ئێستادا لەسەر پلانی بێ بەرامبەریت.", // In English: "You are currently on the free plan." + "billing.download_receipt": "داگرتنی پسووڵە", // In English: "Download Receipt" + "billing.subscription_check_error": "هەڵەیەک ڕوویدا لەکاتی پشکنینی دۆخی بەشداربوونت.", // In English: "A problem occurred while checking your subscription status." + "billing.email_confirmation_needed": "ئیمێڵەکەت هێشتا نەسەلمێندراوە، کۆدێکت بۆ دەنێرین بۆ ئەوەی ئێستا بیسەلمێنیت.", // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." + "billing.sub_cancelled_but_valid_until": "بەشداریکردنت هەڵوەشاندەوە، لە کۆتایی ئەو ماوەیەی پارەت داوە خودکارانە دەگوازرێیەوە بۆ ئاستی خۆڕایی، مەگەر دووبارە بەشداریبکەیەوە.", // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." + "billing.current_plan_until_end_of_period": "پلانی ئێستات تا کۆتایی ئەو ماوەیەی پارەت داوە.", // In English: "Your current plan until the end of this billing period." + "billing.current_plan": "پلانی ئێستا", // In English: "Current plan" + "billing.cancelled_subscription_tier": "بەشداریکردنی (%%) هەڵوەشێندراوە", // In English: "Cancelled Subscription (%%)" + "billing.manage": "بەڕێوەبردن", // In English: "Manage" + "billing.limited": "سنووردار", // In English: "Limited" + "billing.expanded": "کشاندراو", // In English: "Expanded" + "billing.accelerated": "تاودراو", // In English: "Accelerated" + "billing.enjoy_msg": "چێژوەرگرە لە بیرگەی کڵاود و چەندین خزمەتگوزاری تر.", // In English: "Enjoy %% of Cloud Storage plus other benefits." }, }; From ca3d669a1073fff22c1fee50e64511f5eec37b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9Cdevwonny=E2=80=9D?= <115609633+wonnyhan@users.noreply.github.com> Date: Wed, 11 Dec 2024 19:44:48 +0900 Subject: [PATCH 02/10] Complete Korean translation for ko.js (#966) Complete Korean translation for ko.js (#966) https://github.com/HeyPuter/puter/issues/966 --- src/gui/src/i18n/translations/ko.js | 92 ++++++++++++++--------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/src/gui/src/i18n/translations/ko.js b/src/gui/src/i18n/translations/ko.js index 95ad395d7..502276b46 100644 --- a/src/gui/src/i18n/translations/ko.js +++ b/src/gui/src/i18n/translations/ko.js @@ -385,52 +385,52 @@ const ko = { // ---------------------------------------- // Missing translations: // ---------------------------------------- - "billing.change_payment_method": "변경", - "billing.cancel": "취소", - "billing.download_invoice": "다운로드", - "billing.payment_method": "결제 방법", - "billing.payment_method_updated": "결제 방법 업데이트!", - "billing.confirm_payment_method": undefined, // In English: "Confirm Payment Method" - "billing.payment_history": undefined, // In English: "Payment History" - "billing.refunded": undefined, // In English: "Refunded" - "billing.paid": undefined, // In English: "Paid" - "billing.ok": undefined, // In English: "OK" - "billing.resume_subscription": undefined, // In English: "Resume Subscription" - "billing.subscription_cancelled": undefined, // In English: "Your subscription has been canceled." - "billing.subscription_cancelled_description": undefined, // In English: "You will still have access to your subscription until the end of this billing period." - "billing.offering.free": undefined, // In English: "Free" - "billing.offering.pro": undefined, // In English: "Professional" - "billing.offering.business": undefined, // In English: "Business" - "billing.cloud_storage": undefined, // In English: "Cloud Storage" - "billing.ai_access": undefined, // In English: "AI Access" - "billing.bandwidth": undefined, // In English: "Bandwidth" - "billing.apps_and_games": undefined, // In English: "Apps & Games" - "billing.upgrade_to_pro": undefined, // In English: "Upgrade to %strong%" - "billing.switch_to": undefined, // In English: "Switch to %strong%" - "billing.payment_setup": undefined, // In English: "Payment Setup" - "billing.back": undefined, // In English: "Back" - "billing.you_are_now_subscribed_to": undefined, // In English: "You are now subscribed to %strong% tier." - "billing.you_are_now_subscribed_to_without_tier": undefined, // In English: "You are now subscribed" - "billing.subscription_cancellation_confirmation": undefined, // In English: "Are you sure you want to cancel your subscription?" - "billing.subscription_setup": undefined, // In English: "Subscription Setup" - "billing.cancel_it": undefined, // In English: "Cancel It" - "billing.keep_it": undefined, // In English: "Keep It" - "billing.subscription_resumed": undefined, // In English: "Your %strong% subscription has been resumed!" - "billing.upgrade_now": undefined, // In English: "Upgrade Now" - "billing.upgrade": undefined, // In English: "Upgrade" - "billing.currently_on_free_plan": undefined, // In English: "You are currently on the free plan." - "billing.download_receipt": undefined, // In English: "Download Receipt" - "billing.subscription_check_error": undefined, // In English: "A problem occurred while checking your subscription status." - "billing.email_confirmation_needed": undefined, // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." - "billing.sub_cancelled_but_valid_until": undefined, // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." - "billing.current_plan_until_end_of_period": undefined, // In English: "Your current plan until the end of this billing period." - "billing.current_plan": undefined, // In English: "Current plan" - "billing.cancelled_subscription_tier": undefined, // In English: "Cancelled Subscription (%%)" - "billing.manage": undefined, // In English: "Manage" - "billing.limited": undefined, // In English: "Limited" - "billing.expanded": undefined, // In English: "Expanded" - "billing.accelerated": undefined, // In English: "Accelerated" - "billing.enjoy_msg": undefined, // In English: "Enjoy %% of Cloud Storage plus other benefits." + "billing.change_payment_method": "결제 수단 변경", + "billing.cancel": "결제 취소", + "billing.download_invoice": "결제 내역 다운로드", + "billing.payment_method": "결제 수단", + "billing.payment_method_updated": "결제 수단 수정!", + "billing.confirm_payment_method": "결제 수단 완료", // In English: "Confirm Payment Method" + "billing.payment_history": "결제 내역", // In English: "Payment History" + "billing.refunded": "환불", // In English: "Refunded" + "billing.paid": "결제완료", // In English: "Paid" + "billing.ok": "완료", // In English: "OK" + "billing.resume_subscription": "재구독", // In English: "Resume Subscription" + "billing.subscription_cancelled": "구독이 취소되었습니다", // In English: "Your subscription has been canceled." + "billing.subscription_cancelled_description": "청구기간 동안 구독이 가능합니다", // In English: "You will still have access to your subscription until the end of this billing period." + "billing.offering.free": "무료", // In English: "Free" + "billing.offering.pro": "프로", // In English: "Professional" + "billing.offering.business": "사업", // In English: "Business" + "billing.cloud_storage": "클라우드 스토리지", // In English: "Cloud Storage" + "billing.ai_access": "AI 접근", // In English: "AI Access" + "billing.bandwidth": "대역폭", // In English: "Bandwidth" + "billing.apps_and_games": "앱 & 게임", // In English: "Apps & Games" + "billing.upgrade_to_pro": "%strong%로 업데이트하세요", // In English: "Upgrade to %strong%" + "billing.switch_to": "%strong%로 변경하세요", // In English: "Switch to %strong%" + "billing.payment_setup": "결제 설정", // In English: "Payment Setup" + "billing.back": "뒤로가기", // In English: "Back" + "billing.you_are_now_subscribed_to": "이제 %strong% 등급으로 가입 완료", // In English: "You are now subscribed to %strong% tier." + "billing.you_are_now_subscribed_to_without_tier": "구독 중입니다", // In English: "You are now subscribed" + "billing.subscription_cancellation_confirmation": "구독을 취소하시겠습니까?", // In English: "Are you sure you want to cancel your subscription?" + "billing.subscription_setup": "구독 설정", // In English: "Subscription Setup" + "billing.cancel_it": "취소", // In English: "Cancel It" + "billing.keep_it": "유지", // In English: "Keep It" + "billing.subscription_resumed": "%strong%을 재구독 했습니다!", // In English: "Your %strong% subscription has been resumed!" + "billing.upgrade_now": "지금 업그레이드 하세요", // In English: "Upgrade Now" + "billing.upgrade": "업그레이드", // In English: "Upgrade" + "billing.currently_on_free_plan": "현재 무료 요금제에 가입되어있습니다.", // In English: "You are currently on the free plan." + "billing.download_receipt": "영수증 다운로드", // In English: "Download Receipt" + "billing.subscription_check_error": "구독 상태를 확인하는 중에 문제가 발생했습니다.", // In English: "A problem occurred while checking your subscription status." + "billing.email_confirmation_needed": "이메일이 확인되지 않았습니다. 지금 확인할 수 있도록 코드를 보내드리겠습니다", // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." + "billing.sub_cancelled_but_valid_until": "구독 취소 완료. 청구 기간이 끝나면 자동으로 무료 등급으로 전환됩니다. 재구독하지 않으면 다시 요금이 부과되지 않습니다.", // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." + "billing.current_plan_until_end_of_period": "이 청구 기간이 끝날 때까지 현재 요금제.", // In English: "Your current plan until the end of this billing period." + "billing.current_plan": "현재 요금제", // In English: "Current plan" + "billing.cancelled_subscription_tier": "취소된 구독 (%%)", // In English: "Cancelled Subscription (%%)" + "billing.manage": "관리", // In English: "Manage" + "billing.limited": "제한됨", // In English: "Limited" + "billing.expanded": "확장됨", // In English: "Expanded" + "billing.accelerated": "가속됨", // In English: "Accelerated" + "billing.enjoy_msg": "클라우드 스토리지의 %%와 기타 혜택을 누리세요.", // In English: "Enjoy %% of Cloud Storage plus other benefits." }, }; From 658af1fff068928dd57e952056720650d0759a68 Mon Sep 17 00:00:00 2001 From: Nariman Jelveh Date: Wed, 11 Dec 2024 09:45:37 -0800 Subject: [PATCH 03/10] Update ko.js --- src/gui/src/i18n/translations/ko.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/src/i18n/translations/ko.js b/src/gui/src/i18n/translations/ko.js index 502276b46..0187dcd4d 100644 --- a/src/gui/src/i18n/translations/ko.js +++ b/src/gui/src/i18n/translations/ko.js @@ -382,9 +382,6 @@ const ko = { "You can't share with yourself.": "자기 자신과는 공유할 수 없습니다.", "This user already has access to this item": "이 사용자는 이미 접근 권한이 있습니다.", - // ---------------------------------------- - // Missing translations: - // ---------------------------------------- "billing.change_payment_method": "결제 수단 변경", "billing.cancel": "결제 취소", "billing.download_invoice": "결제 내역 다운로드", From c6e814daa80eec01c10f319ebebcb84c42cd26e1 Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Wed, 11 Dec 2024 20:51:00 -0500 Subject: [PATCH 04/10] fix: add fallback moderation in case openai goes down --- .../src/modules/puterai/AIChatService.js | 41 ++++++++-- .../src/modules/puterai/lib/AsModeration.js | 77 +++++++++++++++++++ 2 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 src/backend/src/modules/puterai/lib/AsModeration.js diff --git a/src/backend/src/modules/puterai/AIChatService.js b/src/backend/src/modules/puterai/AIChatService.js index 0cca9f132..b036d7ecb 100644 --- a/src/backend/src/modules/puterai/AIChatService.js +++ b/src/backend/src/modules/puterai/AIChatService.js @@ -6,6 +6,7 @@ const { DB_WRITE } = require("../../services/database/consts"); const { TypeSpec } = require("../../services/drivers/meta/Construct"); const { TypedValue } = require("../../services/drivers/meta/Runtime"); const { Context } = require("../../util/context"); +const { AsModeration } = require("./lib/AsModeration"); // Maximum number of fallback attempts when a model fails, including the first attempt const MAX_FALLBACKS = 3 + 1; // includes first attempt @@ -489,11 +490,6 @@ class AIChatService extends BaseService { * Returns true if OpenAI service is unavailable or all messages pass moderation. */ async moderate ({ messages }) { - const svc_openai = this.services.get('openai-completion'); - - // We can't use moderation of openai service isn't available - if ( ! svc_openai ) return true; - for ( const msg of messages ) { const texts = []; if ( typeof msg.content === 'string' ) texts.push(msg.content); @@ -508,8 +504,39 @@ class AIChatService extends BaseService { const fulltext = texts.join('\n'); - const mod_result = await svc_openai.check_moderation(fulltext); - if ( mod_result.flagged ) return false; + let mod_last_error = null; + let mod_result = null; + try { + const svc_openai = this.services.get('openai-completion'); + mod_result = await svc_openai.check_moderation(fulltext); + if ( mod_result.flagged ) return false; + } catch (e) { + console.error(e); + mod_last_error = e; + } + try { + const svc_claude = this.services.get('claude'); + const chat = svc_claude.as('puter-chat-completion'); + const mod = new AsModeration({ + chat, + model: 'claude-3-haiku-20240307', + }) + if ( ! await mod.moderate(fulltext) ) { + return false; + } + mod_last_error = null; + } catch (e) { + console.error(e); + mod_last_error = e; + } + + if ( mod_last_error ) { + this.log.error('moderation error', { + fulltext, + mod_last_error, + }); + throw new Error('no working moderation service'); + } } return true; } diff --git a/src/backend/src/modules/puterai/lib/AsModeration.js b/src/backend/src/modules/puterai/lib/AsModeration.js new file mode 100644 index 000000000..2f20c76d4 --- /dev/null +++ b/src/backend/src/modules/puterai/lib/AsModeration.js @@ -0,0 +1,77 @@ +const { default: dedent } = require("dedent"); + +class AsModeration { + constructor ({ chat, model }) { + this.chat = chat; + this.model = model; + } + + async moderate (text) { + // copied from Anthropic documentation + // https://docs.anthropic.com/en/docs/about-claude/use-case-guides/content-moderation + const unsafe_categories = [ + 'Child Exploitation', + 'Conspiracy Theories', + 'Hate', + 'Indiscriminate Weapons', + 'Intellectual Property', + 'Non-Violent Crimes', + 'Privacy', + 'Self-Harm', + 'Sex Crimes', + 'Sexual Content', + 'Specialized Advice', + 'Violent Crimes' + ]; + + const unsafe_category_str = unsafe_categories.join('\n'); + + const assessment_prompt = dedent(` + Determine whether the following message warrants moderation, + based on the unsafe categories outlined below. + + Message: + + ${text + .replace('<', '<') + .replace('>', '>') + } + + + Unsafe Categories: + + ${unsafe_category_str} + + + Respond with ONLY a JSON object, using the format below: + {{ + "violation": , + "categories": [Comma-separated list of violated categories], + "explanation": [Optional. Only include if there is a violation.] + }} + `); + + const result = await this.chat.complete({ + messages: [ + { + role: 'user', + content: assessment_prompt, + } + ] + }); + + console.log('result???', require('util').inspect(result, { depth: null })); + + const str = result.message?.content?.[0]?.text ?? + result.messages?.[0]?.content?.[0]?.text ?? + '{ "violation": true }'; + + const parsed = JSON.parse(str); + console.log('parsed?', parsed); + return ! parsed.violation; + } +} + +module.exports = { + AsModeration, +}; From 6ca701139a07a0d20071cf1532cc6e95639a01da Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Wed, 11 Dec 2024 20:55:49 -0500 Subject: [PATCH 05/10] fix: logic from previous commit --- src/backend/src/modules/puterai/AIChatService.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/backend/src/modules/puterai/AIChatService.js b/src/backend/src/modules/puterai/AIChatService.js index b036d7ecb..9dce80f08 100644 --- a/src/backend/src/modules/puterai/AIChatService.js +++ b/src/backend/src/modules/puterai/AIChatService.js @@ -510,6 +510,7 @@ class AIChatService extends BaseService { const svc_openai = this.services.get('openai-completion'); mod_result = await svc_openai.check_moderation(fulltext); if ( mod_result.flagged ) return false; + continue; } catch (e) { console.error(e); mod_last_error = e; @@ -525,6 +526,7 @@ class AIChatService extends BaseService { return false; } mod_last_error = null; + continue; } catch (e) { console.error(e); mod_last_error = e; From 5412408538b5aca2215013768094ccf200ba5555 Mon Sep 17 00:00:00 2001 From: Ali Z <97065630+alizargit@users.noreply.github.com> Date: Wed, 11 Dec 2024 18:36:13 -0800 Subject: [PATCH 06/10] Update dev-center.js --- src/dev-center/js/dev-center.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/dev-center/js/dev-center.js b/src/dev-center/js/dev-center.js index c6eab46c7..31c9670f2 100644 --- a/src/dev-center/js/dev-center.js +++ b/src/dev-center/js/dev-center.js @@ -518,9 +518,11 @@ function generate_edit_app_section(app) {
-
+
-
App has been successfully updated.×
+
App has been successfully updated.× +

Give it a try!

+

Basic

@@ -612,9 +614,10 @@ function generate_edit_app_section(app) {

credentialless attribute for the iframe tag.

-
- - +
+ + +
` From 51ad4e12d4840c225d67e0dd9cc6a565585045eb Mon Sep 17 00:00:00 2001 From: jelveh Date: Wed, 11 Dec 2024 18:40:38 -0800 Subject: [PATCH 07/10] Update index.html --- src/dev-center/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dev-center/index.html b/src/dev-center/index.html index 5a94441a8..14eb58e1c 100644 --- a/src/dev-center/index.html +++ b/src/dev-center/index.html @@ -169,7 +169,7 @@ -
+
From 1b71184b13bcbc823c71a8972ae929b976b80e25 Mon Sep 17 00:00:00 2001 From: Nariman Jelveh Date: Wed, 11 Dec 2024 18:47:34 -0800 Subject: [PATCH 08/10] Revert "Resolved Issue #965: Completed Kurdish Translations" --- src/gui/src/i18n/translations/ku.js | 60 ++++++++++++++--------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/gui/src/i18n/translations/ku.js b/src/gui/src/i18n/translations/ku.js index 4c54555df..962ad7cce 100644 --- a/src/gui/src/i18n/translations/ku.js +++ b/src/gui/src/i18n/translations/ku.js @@ -36,12 +36,12 @@ const ku = { apply: "بەکارهێنان", ascending: "سەرووەی", associated_websites: "وێبسایتەکان پەیوەندیدار", - auto_arrange: "ڕیزکردنی خودکار", + auto_arrange: "ڕیزکردنی ئۆتۆماتیکی", background: "پاشبنەما", browse: "گەڕان", cancel: "ڕەتکردنەوە", center: "ناوەڕاست", - change_desktop_background: "گۆڕینی پاشبنەمای ڕوومێزی...", + change_desktop_background: "گۆڕینی پاشبنەمای ڕوومیزی...", change_email: "گۆڕینی ئیمەیل", change_language: "گۆڕینی زمان", change_password: "گۆڕینی وشەی تێپەڕ", @@ -49,9 +49,9 @@ const ku = { change_username: "گۆڕینی ناوی بەکارهێنەر", close: "داخستن", close_all_windows: "داخستنی هەموو پەنجەکان", - close_all_windows_confirm: "دڵنیایت کە ئەتەوێت هەموو پەنجەرەکان داخەیت؟", + close_all_windows_confirm: "دڵنیایت کە ئەتەوێت هەموو پەنجەکان داخەیت؟", close_all_windows_and_log_out: "داخستن و چوونە دەرەوە", - change_always_open_with: "دەتەوێت هەمیشە ئەم جۆرە فایلە بکرێتەوە بە", + change_always_open_with: "ئەتەوێت هەمیشە ئەم جۆرە فایلە بکرێتەوە بە", color: "ڕەنگ", confirm: "پشتڕاستکردنەوە", confirm_2fa_setup: "کۆدەکە زیادم کردووە بۆ وەرگرەری پشتڕاستکراوەکان", @@ -99,24 +99,24 @@ const ku = { clock_visible_hide: "شاردنەوە - هەمیشە شاردراوە", clock_visible_show: "پیشان - هەمیشە پیشاندراوە", clock_visible_auto: - "خودکار - بنەڕەت، تەنها پیشاندراوە لە دۆخەکانی شاشەی تەواو.", + "ئۆتۆ - بنەڕەت، تەنها پیشاندراوە لە دۆخەکانی شاشەی تەواو.", close_all: "داخستنەوەی هەموو", created: "دروستکراو", date_modified: "بەرواری گۆڕاوە", default: "بە ڕێگای بنەڕەت", delete: "سڕینەوە", delete_account: "سڕینەوەی هەژمار", - delete_permanently: "سڕینەوەی یەکجاری", + delete_permanently: "هەمی سڕینەوە", deleting_file: "سڕینەوەی %%", deploy_as_app: "دابەشکردن وەک ئەپ", descending: "نزەندەی", - desktop: "سەروروومێزی", + desktop: "سەروروومیزی", desktop_background_fit: "ڕێکخستن", developers: "پەرەپێدانەران", dir_published_as_website: `%strong% بەشکراوە بۆ:`, disable_2fa: "ناچالاککردنی 2FA", disable_2fa_confirm: "دڵنیایت کە ئەتەوێت 2FA ناچالاک بکەیت؟", - disable_2fa_instructions: "وشەی تێپەڕی بنووسە بۆ ناچالاککردنی 2FA.", + disable_2fa_instructions: "وشەی تێپەڕی نووسە بۆ ناچالاککردنی 2FA.", disassociate_dir: "جیاکردنەوەی ڕێکەوت", documents: "بەڵگەکان", dont_allow: "ڕێگەندان", @@ -149,7 +149,7 @@ const ku = { "تکایە فۆرمەکەی خوارەوە بەکاربە بۆ ناردنی فیدباک، لێدوان، و ڕاپۆرتی کێشەکان بۆ ئێمە.", feedback_sent_confirmation: "سوپاس بۆ پەیوەندی کردن. گەر ناونیشانی ئیمەیلەکەت هەیە، بە زووترین کات لەگەڵت پەیوەندیدەکەین.", - fit: "گونجاندن", + fit: "ڕێکخستن", folder: "فۆڵدەر", force_quit: "بەهێزەوە کوژاندنەوە", forgot_pass_c2a: "وشەی تێپەڕت لەبیرچووە؟", @@ -157,7 +157,7 @@ const ku = { general: "گشتی", get_a_copy_of_on_puter: `کۆپیێک وەرگرتنەوەی '%%' لە پوتەر.com!`, get_copy_link: "کۆپی بەستەر وەرگرتن", - hide_all_windows: "شاردنەوەی هەموو پەنجەرەکان", + hide_all_windows: "شاردنەوەی هەموو پەنجەکان", home: "ماڵەوە", html_document: "بەڵگەی HTML", hue: "هیو", @@ -170,16 +170,16 @@ const ku = { keep_in_taskbar: "ڕێپێدان لە تاکسبار", language: "زمان", license: "لایسەنس", - lightness: "ڕووناکی", + lightness: "رووناکی", link_copied: "بەستەر کۆپی کرا", loading: "بارکردنەوە", log_in: "چوونەژوورەوە", - log_into_another_account_anyway: "بە هەژماری دیکە هەرچۆنێکەوە چوونەژوورەوە", + log_into_another_account_anyway: "بە هەژماری دیگە هەرچۆنێکەوە چوونەژوورەوە", log_out: "چوونە دەرەوە", looks_good: "پەیوەندیدارە!", manage_sessions: "بەڕێوەبردنی دانیشتنەکان", menubar_style: "شێوازی منوبار", - menubar_style_desktop: "سەروروومێزی", + menubar_style_desktop: "سەروروومیزی", menubar_style_system: "سیستەم", menubar_style_window: "پەنجەرە", modified: "گۆڕاو", @@ -202,10 +202,10 @@ const ku = { no_dir_associated_with_site: "هیچ ڕێکەوتێک پەیوەندیداری ئەم ناونیشانە نییە.", no_websites_published: - "هێشتا هیچ وێبسایتێکت بڵاونەکردووەتەوە. لەسەر فۆڵدەرەکە پەنجەکەی راستبکە بۆ دەستپێکردن.", + "هێشتا هیچ وێبسایتێکت نەبڵاوکردووە. لەسەر فۆڵدەرەکە پەنجەکەی راستبکە بۆ دەستپێکردن.", ok: "باشە", open: "کردنەوە", - open_in_new_tab: "کردنەوە لە پەڕێکی نوێ", + open_in_new_tab: "کردنەوە لە تابێکی نوێ", open_in_new_window: "کردنەوە لە پەنجەرەیەکی نوێ", open_with: "کردنەوە بە", original_name: "ناوی ڕەسەن", @@ -248,27 +248,27 @@ const ku = { public: "گشتی", publish: "بڵاوکردنەوە", publish_as_website: "بڵاوکردنەوە وەک وێبسایت", - puter_description: `پوتەر پێشکەشکراوە بۆ پاراستنی تایبەتیە کەسییەکان، جێگایەکی ئازاد بۆ گەیاندنی هەموو فایلەکان، ئەپەکان، و یارییەکان لە هەر شوێنێک بێ هەموو کاتێک.`, + puter_description: `پوتەر پێشکەشکراوە بۆ پاراستنی تایبەتیە کەسایەتی، جێگایەکی ئازاد بۆ گەیاندنی هەموو فایلەکان، ئەپەکان، و یارییەکان لە هەر شوێنێک بێ هەموو کاتێک.`, reading_file: "خوێندنی %strong%", recent: "نوێترین", recommended: "پێشنیارکراوەکان", recover_password: "ڕێکخستنەوەی وشەی تێپەڕ", refer_friends_c2a: - "1 گیگابایت بۆ هەر هاوڕێیەک دەست بەرکە، پەیوەندیدانی هەژمارێک بۆ پوتەر دروست بکە و پشتڕاست بکە. هاوڕێتیش 1 گیگابایت وەرگرتن دەبێت!", - refer_friends_social_media_c2a: `1 گیگابایت پارێزگاکانی پوتەر.com بۆ هەر هاوڕێیەک بکە!`, + "1 گیگابایت بۆ هەر هاوڕێک دەست بەرکە، پەیوەندیدانی هەژمارێک بۆ پوتەر دروست بکە و پشتڕاست بکە. هاوڕێتیش 1 گیگابایت وەرگرتن دەبێت!", + refer_friends_social_media_c2a: `1 گیگابایت پارێزگاکانی پوتەر.com بۆ هەر هاوڕێک بکە!`, refresh: "بوژانەوە", release_address_confirmation: `دڵنیایت کە ئەتەوێت ئەم ناونیشانە بۆ هەڵگرتن؟`, - remove_from_taskbar: "لابردن لە تاسکباڕ", + remove_from_taskbar: "لابردن لە تاکسبار", rename: "ناونانەوە", repeat: "دووبارەکردنەوە", - replace: "جێگرتنەوە", - replace_all: "جێگرتنەوەی هەموو", + replace: "لە نوێکردنەوە", + replace_all: "لە نوێکردنەوەی هەموو", resend_confirmation_code: "دووبارە ناردنی کۆدی پشتڕاستکردنەوە", reset_colors: "ڕێکخستنی ڕەنگەکان", restart_puter_confirm: "دڵنیایت کە ئەتەوێت پوتەر دووبارە دەستپێبکەیت؟", restore: "گەڕاندنەوە", save: "پاشەکەوت", - saturation: "ڕەنگتێری", + saturation: "سەرەخۆشی", save_account: "پاشەکەوتکردنی هەژمار", save_account_to_get_copy_link: "تکایە هەژمارێک دروست بکە بۆ بەردەوامبوون.", save_account_to_publish: "تکایە هەژمارێک دروست بکە بۆ بەردەوامبوون.", @@ -295,20 +295,20 @@ const ku = { share_to: "هاوبەشکردن بۆ", share_with: "هاوبەشکردن بە:", shortcut_to: "شارتی بۆ", - show_all_windows: "پیشاندانی هەموو پەنجەرەکان", + show_all_windows: "پیشاندانی هەموو پەنجەکان", show_hidden: "پیشاندانی شاردراوەکان", sign_in_with_puter: "چوونەژوورەوە بە پوتەر", sign_up: "خۆتۆمارکردن", signing_in: "چوونەژوورەوە...", size: "قەبارە", skip: "هەڵگرتن", - something_went_wrong: "هەڵەیەکی ڕووی دا.", - sort_by: "ڕیزکردن بەپێی", + something_went_wrong: "هەڵەیەکی رووی دا.", + sort_by: "ڕیزکردن بە", start: "دەستپێکردن", status: "دۆخ", - storage_usage: "بەکاربردنی بیرگە", + storage_usage: "بەکاربردنی پارێزگا", storage_puter_used: "بەکاربردنی لەلایەن پوتەر", - taking_longer_than_usual: "کەمێک زیاتر دەخایەنێت، تکایە چاوەڕوانبە...", + taking_longer_than_usual: "کەمێک زیاتر کەوتە، تکایە چاوەڕوانبە...", task_manager: "بەڕێوەبەری کارەکان", taskmgr_header_name: "ناو", taskmgr_header_status: "دۆخ", @@ -359,8 +359,8 @@ const ku = { setup2fa_3_step_heading: "ناردنی کۆدی 6 ژمارە", setup2fa_4_step_heading: "کۆدی پشتڕاستکردنی نوێ پشکنین", setup2fa_4_instructions: ` - ئەم کۆدانە تەنها ڕێگایەکە بۆ گەیشتنەوە بە هەژمارەکەت گەر موبایلەکەت - لەبیرچوو یاخود نەتوانیت ئەپەکە بەکاربەریت. + ئەم کۆدانە تەنها ڕێگا بۆ گەیشتنەوە بە هەژمارەکەت گەر تۆ موبایلەکەت + لەبیرچووی یاخود ناتوانی ئەپەکەت بەکاربەریت. دڵنیابە کەیان لە شوێنێکی پاراستنەوەیەکان بنووسیت. `, setup2fa_5_step_heading: "پشتڕاستکردنی ڕێکخستنەوەی 2FA", @@ -373,7 +373,7 @@ const ku = { login2fa_otp_instructions: "کۆدی 6 ژمارەیە بنووسە لە ئەپەکەت.", login2fa_recovery_title: "کۆدی پشتڕاستکردنەوەیەک بنووسە", login2fa_recovery_instructions: - "یەکێک لە کۆدەکانی پشتڕاستکردنەوە بنووسە بۆ گەیشتنەوە بە هەژمارەکەت.", + "یەکێک لە کۆدانە پشتڕاستکردنەوە بنووسە بۆ گەیشتنەوە بە هەژمارەکەت.", login2fa_use_recovery_code: "بەکارهێنانی کۆدی پشتڕاستکردنەوە", login2fa_recovery_back: "گەڕانەوە", login2fa_recovery_placeholder: "XXXXXXXX", From d4ca9d438caa413e4190246fb27ef4bfec94007e Mon Sep 17 00:00:00 2001 From: KernelDeimos Date: Thu, 12 Dec 2024 09:51:32 -0500 Subject: [PATCH 09/10] dev: fix issue with prompt validation --- src/backend/src/modules/puterai/AIChatService.js | 1 + src/backend/src/modules/puterai/FakeChatService.js | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/backend/src/modules/puterai/AIChatService.js b/src/backend/src/modules/puterai/AIChatService.js index 9dce80f08..8b2b867af 100644 --- a/src/backend/src/modules/puterai/AIChatService.js +++ b/src/backend/src/modules/puterai/AIChatService.js @@ -279,6 +279,7 @@ class AIChatService extends BaseService { intended_service, parameters }; + await svc_event.emit('ai.prompt.validate', event); if ( ! event.allow ) { test_mode = true; } diff --git a/src/backend/src/modules/puterai/FakeChatService.js b/src/backend/src/modules/puterai/FakeChatService.js index 330805530..6855aedd2 100644 --- a/src/backend/src/modules/puterai/FakeChatService.js +++ b/src/backend/src/modules/puterai/FakeChatService.js @@ -65,6 +65,10 @@ class FakeChatService extends BaseService { "output_tokens": 1 } }, + "usage": { + "input_tokens": 0, + "output_tokens": 1 + }, "logprobs": null, "finish_reason": "stop" } From 52d077cc1964541e655b082f074acc128495f6b5 Mon Sep 17 00:00:00 2001 From: hexsproductions Date: Thu, 12 Dec 2024 15:59:55 +0100 Subject: [PATCH 10/10] Add missing French translations (#975) --- src/gui/src/i18n/translations/fr.js | 94 ++++++++++++++--------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/src/gui/src/i18n/translations/fr.js b/src/gui/src/i18n/translations/fr.js index a0bc464a5..d158618d3 100644 --- a/src/gui/src/i18n/translations/fr.js +++ b/src/gui/src/i18n/translations/fr.js @@ -364,54 +364,54 @@ const fr = { "This user already has access to this item": 'Cet utilisateur à déja accès à cet élément', // ---------------------------------------- - // Missing translations: + // translations: // ---------------------------------------- - "billing.change_payment_method": undefined, // In English: "Change" - "billing.cancel": undefined, // In English: "Cancel" - "billing.download_invoice": undefined, // In English: "Download" - "billing.payment_method": undefined, // In English: "Payment Method" - "billing.payment_method_updated": undefined, // In English: "Payment method updated!" - "billing.confirm_payment_method": undefined, // In English: "Confirm Payment Method" - "billing.payment_history": undefined, // In English: "Payment History" - "billing.refunded": undefined, // In English: "Refunded" - "billing.paid": undefined, // In English: "Paid" - "billing.ok": undefined, // In English: "OK" - "billing.resume_subscription": undefined, // In English: "Resume Subscription" - "billing.subscription_cancelled": undefined, // In English: "Your subscription has been canceled." - "billing.subscription_cancelled_description": undefined, // In English: "You will still have access to your subscription until the end of this billing period." - "billing.offering.free": undefined, // In English: "Free" - "billing.offering.pro": undefined, // In English: "Professional" - "billing.offering.business": undefined, // In English: "Business" - "billing.cloud_storage": undefined, // In English: "Cloud Storage" - "billing.ai_access": undefined, // In English: "AI Access" - "billing.bandwidth": undefined, // In English: "Bandwidth" - "billing.apps_and_games": undefined, // In English: "Apps & Games" - "billing.upgrade_to_pro": undefined, // In English: "Upgrade to %strong%" - "billing.switch_to": undefined, // In English: "Switch to %strong%" - "billing.payment_setup": undefined, // In English: "Payment Setup" - "billing.back": undefined, // In English: "Back" - "billing.you_are_now_subscribed_to": undefined, // In English: "You are now subscribed to %strong% tier." - "billing.you_are_now_subscribed_to_without_tier": undefined, // In English: "You are now subscribed" - "billing.subscription_cancellation_confirmation": undefined, // In English: "Are you sure you want to cancel your subscription?" - "billing.subscription_setup": undefined, // In English: "Subscription Setup" - "billing.cancel_it": undefined, // In English: "Cancel It" - "billing.keep_it": undefined, // In English: "Keep It" - "billing.subscription_resumed": undefined, // In English: "Your %strong% subscription has been resumed!" - "billing.upgrade_now": undefined, // In English: "Upgrade Now" - "billing.upgrade": undefined, // In English: "Upgrade" - "billing.currently_on_free_plan": undefined, // In English: "You are currently on the free plan." - "billing.download_receipt": undefined, // In English: "Download Receipt" - "billing.subscription_check_error": undefined, // In English: "A problem occurred while checking your subscription status." - "billing.email_confirmation_needed": undefined, // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." - "billing.sub_cancelled_but_valid_until": undefined, // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." - "billing.current_plan_until_end_of_period": undefined, // In English: "Your current plan until the end of this billing period." - "billing.current_plan": undefined, // In English: "Current plan" - "billing.cancelled_subscription_tier": undefined, // In English: "Cancelled Subscription (%%)" - "billing.manage": undefined, // In English: "Manage" - "billing.limited": undefined, // In English: "Limited" - "billing.expanded": undefined, // In English: "Expanded" - "billing.accelerated": undefined, // In English: "Accelerated" - "billing.enjoy_msg": undefined, // In English: "Enjoy %% of Cloud Storage plus other benefits." + "billing.change_payment_method": "Modifier le mode de paiement", // In English: "Change" + "billing.cancel": "Annuler", // In English: "Cancel" + "billing.download_invoice": "Télécharger la facture", // In English: "Download" + "billing.payment_method": "Mode de paiement", // In English: "Payment Method" + "billing.payment_method_updated": "Mode de paiement mis à jour !", // In English: "Payment method updated!" + "billing.confirm_payment_method": "Confirmer le mode de paiement", // In English: "Confirm Payment Method" + "billing.payment_history": "Historique des paiements", // In English: "Payment History" + "billing.refunded": "Remboursé", // In English: "Refunded" + "billing.paid": "Payé", // In English: "Paid" + "billing.ok": "OK", // In English: "OK" + "billing.resume_subscription": "Reprendre l'abonnement", // In English: "Resume Subscription" + "billing.subscription_cancelled": "Votre abonnement a été annulé.", // In English: "Your subscription has been canceled." + "billing.subscription_cancelled_description": "Vous aurez toujours accès à votre abonnement jusqu'à la fin de cette période de facturation.", // In English: "You will still have access to your subscription until the end of this billing period." + "billing.offering.free": "Gratuit", // In English: "Free" + "billing.offering.pro": "Professionnel", // In English: "Professional" + "billing.offering.business": "Entreprise", // In English: "Business" + "billing.cloud_storage": "Stockage Cloud", // In English: "Cloud Storage" + "billing.ai_access": "Accès à l'IA", // In English: "AI Access" + "billing.bandwidth": "Bande passante", // In English: "Bandwidth" + "billing.apps_and_games": "Applications et jeux", // In English: "Apps & Games" + "billing.upgrade_to_pro": "Passer à %strong%", // In English: "Upgrade to %strong%" + "billing.switch_to": "Passer à %strong%", // In English: "Switch to %strong%" + "billing.payment_setup": "Configuration du paiement", // In English: "Payment Setup" + "billing.back": "Retour", // In English: "Back" + "billing.you_are_now_subscribed_to": "Vous êtes maintenant abonné au niveau %strong%.", // In English: "You are now subscribed to %strong% tier." + "billing.you_are_now_subscribed_to_without_tier": "Vous êtes maintenant abonné", // In English: "You are now subscribed" + "billing.subscription_cancellation_confirmation": "Êtes-vous sûr de vouloir annuler votre abonnement ?", // In English: "Are you sure you want to cancel your subscription?" + "billing.subscription_setup": "Configuration de l'abonnement", // In English: "Subscription Setup" + "billing.cancel_it": "L'annuler", // In English: "Cancel It" + "billing.keep_it": "Le conserver", // In English: "Keep It" + "billing.subscription_resumed": "Votre abonnement %strong% a été repris !", // In English: "Your %strong% subscription has been resumed!" + "billing.upgrade_now": "Mettre à niveau maintenant", // In English: "Upgrade Now" + "billing.upgrade": "Mettre à niveau", // In English: "Upgrade" + "billing.currently_on_free_plan": "Vous êtes actuellement sur le plan gratuit.", // In English: "You are currently on the free plan." + "billing.download_receipt": "Télécharger le reçu", // In English: "Download Receipt" + "billing.subscription_check_error": "Un problème est survenu lors de la vérification de votre statut d'abonnement.", // In English: "A problem occurred while checking your subscription status." + "billing.email_confirmation_needed": "Votre e-mail n'a pas été confirmé. Nous allons vous envoyer un code pour le confirmer maintenant.", // In English: "Your email has not been confirmed. We'll send you a code to confirm it now." + "billing.sub_cancelled_but_valid_until": "Vous avez annulé votre abonnement et il passera automatiquement au niveau gratuit à la fin de la période de facturation. Vous ne serez pas facturé à nouveau sauf si vous vous réabonnez.", // In English: "You have cancelled your subscription and it will automatically switch to the free tier at the end of the billing period. You will not be charged again unless you re-subscribe." + "billing.current_plan_until_end_of_period": "Votre plan actuel jusqu'à la fin de cette période de facturation.", // In English: "Your current plan until the end of this billing period." + "billing.current_plan": "Plan actuel", // In English: "Current plan" + "billing.cancelled_subscription_tier": "Abonnement annulé (%%)", // In English: "Cancelled Subscription (%%)" + "billing.manage": "Gérer", // In English: "Manage" + "billing.limited": "Limité", // In English: "Limited" + "billing.expanded": "Étendu", // In English: "Expanded" + "billing.accelerated": "Accéléré", // In English: "Accelerated" + "billing.enjoy_msg": "Profitez de %% de stockage cloud et d'autres avantages.", // In English: "Enjoy %% of Cloud Storage plus other benefits." } };