diff --git a/app/assets/locales/ja.json b/app/assets/locales/ja.json index 62d3c7dbed..c33dfe0a3a 100644 --- a/app/assets/locales/ja.json +++ b/app/assets/locales/ja.json @@ -164,6 +164,10 @@ "wrong_access_code": "誤った接続コード", "generate_viewers_access_code": "視聴者用接続コードを作成する", "generate_mods_access_code": "司会者用接続コードを作成する", + "server_tag": "この会議室のサーバタイプを選択", + "default_tag_name": "通常", + "server_tag_desired": "最適", + "server_tag_required": "最小", "are_you_sure_delete_room": "本当にこの会議室を削除しますか?" } }, @@ -274,8 +278,8 @@ "administration": { "administration": "法的根拠", "terms": "利用規約", - "privacy": "プライバシーポリシー", - "privacy_policy": "プライバシーポリシー", + "privacy": "プライバシーに関する告知", + "privacy_policy": "プライバシーに関する告知", "change_term_links": "ページ下方の利用規約へのリンクを変更する", "change_privacy_link": "ページ下方のプライバシーポリシーへのリンクを変更する", "helpcenter": "ヘルプセンター", @@ -413,7 +417,7 @@ "brand_color_updated": "サイトの基調色がアップデートされました。", "brand_image_updated": "ブランド画像がアップデートされました。", "brand_image_deleted": "ブランド画像が消去されました。", - "privacy_policy_updated": "プライバシーポリシーがアップデートされました。", + "privacy_policy_updated": "プライバシーに関する告知がアップデートされました。", "helpcenter_updated": "ヘルプセンターのリンクが更新されました。", "terms_of_service_updated": "利用規約が更新されました。", "maintenance_updated": "メンテナンスバナーが更新されました。" @@ -437,6 +441,7 @@ }, "error": { "problem_completing_action": "操作をうまく完了できませんでした。\nもう一度やってみてください。", + "server_type_unavailable": "希望されたサーバタイプは利用できません。別のタイプを部屋の設定から選んでください。", "file_type_not_supported": "ファイルの形式がサポートされていません。", "file_size_too_large": "ファイルが大きすぎます。", "file_upload_error": "ファイルがアップロードできません。", @@ -533,6 +538,11 @@ }, "url": { "invalid": "無効なURL" + }, + "text_form": { + "value": { + "required": "何かメッセージを入力してください" + } } }, "room": { diff --git a/app/assets/locales/tr.json b/app/assets/locales/tr.json index c6188d597a..e55ac85b1c 100644 --- a/app/assets/locales/tr.json +++ b/app/assets/locales/tr.json @@ -14,6 +14,7 @@ "report": "Bildir", "share": "Paylaş", "cancel": "İptal", + "reset": "Sıfırla", "close": "Kapat", "delete": "Sil", "copy": "Kopyala", @@ -163,6 +164,10 @@ "wrong_access_code": "Erişim kodu yanlış", "generate_viewers_access_code": "İzleyiciler için erişim kodu oluştur", "generate_mods_access_code": "Sorumlular için erişim kodu oluştur", + "server_tag": "Bu oda için bir sunucu türü seçin", + "default_tag_name": "Varsayılan", + "server_tag_desired": "İstenilen", + "server_tag_required": "Zorunlu", "are_you_sure_delete_room": "Bu odayı silmek istediğinize emin misiniz?" } }, @@ -229,7 +234,8 @@ "empty_invited_users_subtext": "Durumu çağrılmış olarak değiştirilen kullanıcılar burada görüntülenir.", "invited": { "time_sent": "Gönderilme zamanı", - "valid": "Geçerli" + "valid": "Geçerli", + "revoke": "Geçersiz kıl" } }, "server_rooms": { @@ -272,8 +278,8 @@ "administration": { "administration": "Yönetim", "terms": "Hüküm ve koşullar", - "privacy": "Gizlilik ilkesi", - "privacy_policy": "Gizlilik ilkesi", + "privacy": "Gizlilik bildirimi", + "privacy_policy": "Gizlilik bildirimi", "change_term_links": "Sayfanın altında görüntülenecek koşullar bağlantısını değiştir", "change_privacy_link": "Sayfanın altında görüntülenecek gizlilik bağlantısını değiştir", "helpcenter": "Yardım merkezi", @@ -301,7 +307,7 @@ "registration": { "registration": "Hesap açma", "role_mapping_by_email": "Roller e-postaya göre eşleştirilsin", - "role_mapping_by_email_description": "Kullanıcı rollerini e-postalarına göre belirler. rol1?e-posta1, rol2=e-posta2 biçiminde olmalıdır", + "role_mapping_by_email_description": "Kullanıcı rollerini e-postalarına göre belirler. rol1?e-posta1,rol2=e-posta2 biçiminde olmalıdır", "enter_role_mapping_rule": "Bir rol eşleştirme kuralı yazın", "resync_on_login": "Kullanıcı verileri her oturum açıldığında eşitlensin", "resync_on_login_description": "Bir kullanıcının bilgilerini her oturum açtığından yeniden eşitleyerek, Greenlight üzerindeki bilgilerin her zaman dış kimlik doğrulama hizmeti sağlayıcısındakiler ile aynı olmasını sağlar", @@ -411,7 +417,7 @@ "brand_color_updated": "Marka rengi güncellendi.", "brand_image_updated": "Marka görseli güncellendi.", "brand_image_deleted": "Marka görseli silindi.", - "privacy_policy_updated": "Gizlilik ilkesi güncellendi.", + "privacy_policy_updated": "Gizlilik bildirimi güncellendi.", "helpcenter_updated": "Yardım merkezi bağlantısı güncellendi.", "terms_of_service_updated": "Hizmet koşulları güncellendi.", "maintenance_updated": "Bakım duyurusu güncellendi." @@ -429,11 +435,13 @@ "role_permission_updated": "Rol yetkileri güncellendi." }, "invitations": { - "invitation_sent": "Çağrı gönderildi" + "invitation_sent": "Çağrı gönderildi", + "invitation_revoked": "Bir çağrı geçersiz kılındı" } }, "error": { "problem_completing_action": "Bu işlem yapılırken bir sorun çıktı.\nLütfen yeniden deneyin.", + "server_type_unavailable": "İstenilen sunucu türü kullanılamıyor. Lütfen oda ayarlarında başka bir tür seçin.", "file_type_not_supported": "Dosya türü desteklenmiyor.", "file_size_too_large": "Dosya boyutu çok büyük.", "file_upload_error": "Dosya yüklenemedi.", @@ -530,6 +538,11 @@ }, "url": { "invalid": "Adres geçersiz" + }, + "text_form": { + "value": { + "required": "Lütfen bir ileti yazın" + } } }, "room": { diff --git a/app/javascript/components/admin/site_settings/administration/LinksForm.jsx b/app/javascript/components/admin/site_settings/administration/LinksForm.jsx index b92aa3680c..ce500ede70 100644 --- a/app/javascript/components/admin/site_settings/administration/LinksForm.jsx +++ b/app/javascript/components/admin/site_settings/administration/LinksForm.jsx @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License along // with Greenlight; if not, see . -import React, { useEffect } from 'react'; +import React, { useCallback, useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import { Button } from 'react-bootstrap'; import { useTranslation } from 'react-i18next'; @@ -29,13 +29,28 @@ export default function LinksForm({ id, value, mutation: useUpdateSiteSettingsAP const { methods, fields } = useLinksForm({ defaultValues: { value } }); + const formText = useRef(''); + useEffect(() => { - if (!methods) { return; } - methods.reset({ value }); + if (methods) { + methods.reset({ value }); + formText.current = value; + } }, [methods, value]); + const handleSubmit = useCallback( + (formData) => { + if (formText.current !== formData[`${fields.value.hookForm.id}`]) { + formText.current = formData[`${fields.value.hookForm.id}`]; + return updateSiteSettingsAPI.mutate(formData); + } + return null; + }, + [updateSiteSettingsAPI.mutate], + ); + return ( -
+