From 815b3ff16f61428022fc5653f564268ac3537472 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Tue, 5 Dec 2023 13:45:44 +0300 Subject: [PATCH 01/16] added fr, it, de, es --- .../extras/update-daemon/res/langs/langs.iss | 74 ++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index 135217bde..af48ba9f3 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -2,71 +2,143 @@ en.CAPTION_TEXT =ONLYOFFICE Update Service ru.CAPTION_TEXT =Сервис обновлений ONLYOFFICE ar_SA.CAPTION_TEXT =خدمة تحديث أونلي أوفيس +de.CAPTION_TEXT =Aktualisierungsdienst von ONLYOFFICE +es.CAPTION_TEXT =Servicio de actualización de ONLYOFFICE +fr.CAPTION_TEXT =Service de mise à jour ONLYOFFICE +it.CAPTION_TEXT =Servizio di aggiornamento ONLYOFFICE en.MESSAGE_TEXT_ERR1 =An error occurred: ru.MESSAGE_TEXT_ERR1 =Произошла ошибка: ar_SA.MESSAGE_TEXT_ERR1 =حصل خطأ: +de.MESSAGE_TEXT_ERR1 =Ein Fehler ist aufgetreten: +es.MESSAGE_TEXT_ERR1 =Se ha producido un error: +fr.MESSAGE_TEXT_ERR1 =Une erreur s'est produite : +it.MESSAGE_TEXT_ERR1 =Si è verificato un errore: en.MESSAGE_TEXT_ERR2 =An error occurred while deleting: ru.MESSAGE_TEXT_ERR2 =Произошла ошибка при удалении: ar_SA.MESSAGE_TEXT_ERR2 =حصل خطأ أثناء الحذف: +de.MESSAGE_TEXT_ERR2 =Beim Löschvorgang ist ein Fehler aufgetreten: +es.MESSAGE_TEXT_ERR2 =Se ha producido un error al eliminar: +fr.MESSAGE_TEXT_ERR2 =Une erreur s'est produite lors de la suppression : +it.MESSAGE_TEXT_ERR2 =Si è verificato un errore durante l'eliminazione: en.MESSAGE_TEXT_ERR3 =An error occurred while creating: ru.MESSAGE_TEXT_ERR3 =Произошла ошибка при создании: ar_SA.MESSAGE_TEXT_ERR3 =حصل خطأ أثناء الإنشاء: +de.MESSAGE_TEXT_ERR3 =Beim Erstellen ist ein Fehler aufgetreten: +es.MESSAGE_TEXT_ERR3 =Se ha producido un error al crear: +fr.MESSAGE_TEXT_ERR3 =Une erreur s'est produite lors de la création : +it.MESSAGE_TEXT_ERR3 =Si è verificato un errore durante la creazione: en.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! ru.MESSAGE_TEXT_ERR4 =Произошла ошибка при перезапуске сервиса! ar_SA.MESSAGE_TEXT_ERR4 =حصل خطأ أثناء إعادة تشغيل الخدمة: +de.MESSAGE_TEXT_ERR4 =Beim Neustart des Dienstes ist ein Fehler aufgetreten! +es.MESSAGE_TEXT_ERR4 =¡Se ha producido un error al reiniciar el servicio! +fr.MESSAGE_TEXT_ERR4 =Une erreur s'est produite lors du redémarrage du service ! +it.MESSAGE_TEXT_ERR4 =Si è verificato un errore durante il riavvio del servizio! en.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: ru.MESSAGE_TEXT_ERR5 =Обновление отменено. Не удалось найти папку: ar_SA.MESSAGE_TEXT_ERR5 =تم الغاء التحديث. غير قادر على العثور على المجلد: +de.MESSAGE_TEXT_ERR5 =Update abgebrochen. Ordner kann nicht gefunden werden: +es.MESSAGE_TEXT_ERR5 =Actualización cancelada. No se puede encontrar la carpeta: +fr.MESSAGE_TEXT_ERR5 =Mise à jour annulée. Impossible de trouver le dossier : +it.MESSAGE_TEXT_ERR5 =Aggiornamento annullato. Impossibile trovare la cartella: en.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: ru.MESSAGE_TEXT_ERR6 =Обновление отменено. Отсутствует подпись файла: ar_SA.MESSAGE_TEXT_ERR6 =تم الغاء التحديث. توقيع الملف مفقود: +de.MESSAGE_TEXT_ERR6 =Update abgebrochen. Die Dateisignatur fehlt: +es.MESSAGE_TEXT_ERR6 =Actualización cancelada. No hay firma del archivo: +fr.MESSAGE_TEXT_ERR6 =Mise à jour annulée. La signature du fichier est manquante : +it.MESSAGE_TEXT_ERR6 =Aggiornamento annullato. Manca la firma del file: en.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: ru.MESSAGE_TEXT_ERR7 =Обновление отменено. Не удалось удалить папку: ar_SA.MESSAGE_TEXT_ERR7 =تم الغاء التحديث. غير قادر على حذف المجلد: +de.MESSAGE_TEXT_ERR7 =Update abgebrochen. Ordner kann nicht gelöscht werden: +es.MESSAGE_TEXT_ERR7 =Actualización cancelada. No se puede eliminar la carpeta: +fr.MESSAGE_TEXT_ERR7 =Mise à jour annulée. Impossible de supprimer le dossier : +it.MESSAGE_TEXT_ERR7 =Aggiornamento annullato. Impossibile eliminare la cartella: en.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: ru.MESSAGE_TEXT_ERR8 =Обновление отменено. Приложение не закрыто: ar_SA.MESSAGE_TEXT_ERR8 =تم الغاء التحديث. البرنامج ليس مغلق: +de.MESSAGE_TEXT_ERR8 =Update abgebrochen. Die App ist nicht geschlossen: +es.MESSAGE_TEXT_ERR8 =Actualización cancelada. El programa no está cerrado: +fr.MESSAGE_TEXT_ERR8 =Mise à jour annulée. L'application n'est pas fermée : +it.MESSAGE_TEXT_ERR8 =Aggiornamento annullato. Il programma non è chiuso: en.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: ru.MESSAGE_TEXT_ERR9 =Обновление отменено. Не удалось создать папку: ar_SA.MESSAGE_TEXT_ERR9 =تم الغاء التحديث. غير قادر على إنشاء المجلد: +de.MESSAGE_TEXT_ERR9 =Update abgebrochen. Ordner kann nicht erstellt werden: +es.MESSAGE_TEXT_ERR9 =Actualización cancelada. No se puede crear la carpeta: +fr.MESSAGE_TEXT_ERR9 =Mise à jour annulée. Impossible de créer un dossier : +it.MESSAGE_TEXT_ERR9 =Aggiornamento annullato. Impossibile creare la cartella: en.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: ru.MESSAGE_TEXT_ERR10 =Обновление отменено. Не удалось переместить файлы в резервную копию: ar_SA.MESSAGE_TEXT_ERR10 =تم الغاء التحديث. غير قادر على استبدال الملفات إلى النسخة احتياطية: +de.MESSAGE_TEXT_ERR10 =Update abgebrochen. Die zu sichernden Dateien können nicht ersetzt werden: +es.MESSAGE_TEXT_ERR10 =Actualización cancelada. No se pueden reemplazar los archivos en la copia de seguridad: +fr.MESSAGE_TEXT_ERR10 =Mise à jour annulée. Impossible de remplacer les fichiers par des fichiers de sauvegarde : +it.MESSAGE_TEXT_ERR10 =Aggiornamento annullato. Impossibile spostare i file nel backup: en.MESSAGE_TEXT_ERR11 =Can't restore files from backup! ru.MESSAGE_TEXT_ERR11 =Не удалось восстановить файлы из резервной копии! ar_SA.MESSAGE_TEXT_ERR11 =غير قادر على استرجاع الملفات من النسخة الاحتياطية! +de.MESSAGE_TEXT_ERR11 =Dateien können nicht aus dem Backup wiederhergestellt werden! +es.MESSAGE_TEXT_ERR11 =¡No se pueden restaurar los archivos de la copia de seguridad! +fr.MESSAGE_TEXT_ERR11 =Impossible de restaurer des fichiers à partir d'une sauvegarde ! +it.MESSAGE_TEXT_ERR11 =Impossibile ripristinare i file dal backup! en.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: ru.MESSAGE_TEXT_ERR12 =Обновление отменено. Не удалось переместить обновления в папку приложения: ar_SA.MESSAGE_TEXT_ERR12 =تم الغاء التحديث. غير قادر على نقل التحديثات إلى مسار البرنامج: +de.MESSAGE_TEXT_ERR12 =Update abgebrochen. Updates können nicht in den App-Pfad verschoben werden: +es.MESSAGE_TEXT_ERR12 =Actualización cancelada. No se pueden mover las actualizaciones a la ruta de la aplicación: +fr.MESSAGE_TEXT_ERR12 =Mise à jour annulée. Impossible de déplacer les mises à jour vers le chemin d'accès à l'application : +it.MESSAGE_TEXT_ERR12 =Aggiornamento annullato. Impossibile spostare gli aggiornamenti nel percorso dell'app: en.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: ru.MESSAGE_TEXT_ERR13 =Произошла ошибка при удалении папки приложения: ar_SA.MESSAGE_TEXT_ERR13 =حصل خطأ أثاء إزالة مسار البرنامج: +de.MESSAGE_TEXT_ERR13 =Beim Entfernen des App-Pfads ist ein Fehler aufgetreten: +es.MESSAGE_TEXT_ERR13 =Se ha producido un error al eliminar la ruta de la aplicación: +fr.MESSAGE_TEXT_ERR13 =Une erreur s'est produite lors de la suppression du chemin d'accès à l'application : +it.MESSAGE_TEXT_ERR13 =Si è verificato un errore durante la rimozione del percorso dell'app: en.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: ru.MESSAGE_TEXT_ERR14 =Произошла ошибка при восстановлении файлов из резервной копии: ar_SA.MESSAGE_TEXT_ERR14 =حصل خطأ أثناء استرجاع الملفات من النسخة الاحتياطية: +de.MESSAGE_TEXT_ERR14 =Bei der Wiederherstellung von Dateien aus dem Backup ist ein Fehler aufgetreten: +es.MESSAGE_TEXT_ERR14 =Se ha producido un error al restaurar los archivos de la copia de seguridad: +fr.MESSAGE_TEXT_ERR14 =Une erreur s'est produite lors de la restauration des fichiers à partir de la sauvegarde : +it.MESSAGE_TEXT_ERR14 =Si è verificato un errore durante il ripristino dei file dal backup: en.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! ru.MESSAGE_TEXT_ERR15 =Произошла ошибка при перезапуске приложения! ar_SA.MESSAGE_TEXT_ERR15 =حصل خطأ أثناء إعادة تشغيل البرنامج! +de.MESSAGE_TEXT_ERR15 =Beim Neustart der App ist ein Fehler aufgetreten! +es.MESSAGE_TEXT_ERR15 =¡Se ha producido un error al reiniciar el programa! +fr.MESSAGE_TEXT_ERR15 =Une erreur s'est produite lors du redémarrage de l'application ! +it.MESSAGE_TEXT_ERR15 =Si è verificato un errore durante il riavvio del programma! en.MESSAGE_TEXT_ERR16 =SDL init error: ru.MESSAGE_TEXT_ERR16 =Ошибка инициализации SDL: ar_SA.MESSAGE_TEXT_ERR16 =خطأ من SDL init: +de.MESSAGE_TEXT_ERR16 =Fehler bei der SDL-Initialisierung: +es.MESSAGE_TEXT_ERR16 =Error de inicio SDL: +fr.MESSAGE_TEXT_ERR16 =Erreur d'initialisation SDL : +it.MESSAGE_TEXT_ERR16 =Errore di inizializzazione SDL: en.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: ru.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher вернул ошибку: -ar_SA.MESSAGE_TEXT_ERR17 =خطأ من ServiceCtrlDispatcher: \ No newline at end of file +ar_SA.MESSAGE_TEXT_ERR17 =خطأ من ServiceCtrlDispatcher: +de.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hat einen Fehler zurückgegeben: +es.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha devuelto un error: +fr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher a renvoyé une erreur : +it.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha restituito un errore: \ No newline at end of file From 02eb6fe4178cf7b106ad7b000f583bb8b177bc69 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Tue, 5 Dec 2023 13:55:39 +0300 Subject: [PATCH 02/16] added pt-BR --- .../extras/update-daemon/res/langs/langs.iss | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index af48ba9f3..2f1b72162 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -6,6 +6,7 @@ de.CAPTION_TEXT =Aktualisierungsdienst von ONLYOFFICE es.CAPTION_TEXT =Servicio de actualización de ONLYOFFICE fr.CAPTION_TEXT =Service de mise à jour ONLYOFFICE it.CAPTION_TEXT =Servizio di aggiornamento ONLYOFFICE +pt_BR.CAPTION_TEXT =Serviço de atualização ONLYOFFICE en.MESSAGE_TEXT_ERR1 =An error occurred: ru.MESSAGE_TEXT_ERR1 =Произошла ошибка: @@ -14,6 +15,7 @@ de.MESSAGE_TEXT_ERR1 =Ein Fehler ist aufgetreten: es.MESSAGE_TEXT_ERR1 =Se ha producido un error: fr.MESSAGE_TEXT_ERR1 =Une erreur s'est produite : it.MESSAGE_TEXT_ERR1 =Si è verificato un errore: +pt_BR.MESSAGE_TEXT_ERR1 =Um erro ocorreu: en.MESSAGE_TEXT_ERR2 =An error occurred while deleting: ru.MESSAGE_TEXT_ERR2 =Произошла ошибка при удалении: @@ -22,6 +24,7 @@ de.MESSAGE_TEXT_ERR2 =Beim Löschvorgang ist ein Fehler aufgetreten: es.MESSAGE_TEXT_ERR2 =Se ha producido un error al eliminar: fr.MESSAGE_TEXT_ERR2 =Une erreur s'est produite lors de la suppression : it.MESSAGE_TEXT_ERR2 =Si è verificato un errore durante l'eliminazione: +pt_BR.MESSAGE_TEXT_ERR2 =Ocorreu um erro ao excluir: en.MESSAGE_TEXT_ERR3 =An error occurred while creating: ru.MESSAGE_TEXT_ERR3 =Произошла ошибка при создании: @@ -30,6 +33,7 @@ de.MESSAGE_TEXT_ERR3 =Beim Erstellen ist ein Fehler aufgetreten: es.MESSAGE_TEXT_ERR3 =Se ha producido un error al crear: fr.MESSAGE_TEXT_ERR3 =Une erreur s'est produite lors de la création : it.MESSAGE_TEXT_ERR3 =Si è verificato un errore durante la creazione: +pt_BR.MESSAGE_TEXT_ERR3 =Ocorreu um erro ao criar: en.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! ru.MESSAGE_TEXT_ERR4 =Произошла ошибка при перезапуске сервиса! @@ -38,6 +42,7 @@ de.MESSAGE_TEXT_ERR4 =Beim Neustart des Dienstes ist ein Fehler aufgetreten! es.MESSAGE_TEXT_ERR4 =¡Se ha producido un error al reiniciar el servicio! fr.MESSAGE_TEXT_ERR4 =Une erreur s'est produite lors du redémarrage du service ! it.MESSAGE_TEXT_ERR4 =Si è verificato un errore durante il riavvio del servizio! +pt_BR.MESSAGE_TEXT_ERR4 =Ocorreu um erro ao reiniciar o serviço! en.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: ru.MESSAGE_TEXT_ERR5 =Обновление отменено. Не удалось найти папку: @@ -46,6 +51,7 @@ de.MESSAGE_TEXT_ERR5 =Update abgebrochen. Ordner kann nicht gefunden werden: es.MESSAGE_TEXT_ERR5 =Actualización cancelada. No se puede encontrar la carpeta: fr.MESSAGE_TEXT_ERR5 =Mise à jour annulée. Impossible de trouver le dossier : it.MESSAGE_TEXT_ERR5 =Aggiornamento annullato. Impossibile trovare la cartella: +pt_BR.MESSAGE_TEXT_ERR5 =Atualização cancelada. Não foi possível encontrar a pasta: en.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: ru.MESSAGE_TEXT_ERR6 =Обновление отменено. Отсутствует подпись файла: @@ -54,6 +60,7 @@ de.MESSAGE_TEXT_ERR6 =Update abgebrochen. Die Dateisignatur fehlt: es.MESSAGE_TEXT_ERR6 =Actualización cancelada. No hay firma del archivo: fr.MESSAGE_TEXT_ERR6 =Mise à jour annulée. La signature du fichier est manquante : it.MESSAGE_TEXT_ERR6 =Aggiornamento annullato. Manca la firma del file: +pt_BR.MESSAGE_TEXT_ERR6 =Atualização cancelada. A assinatura do arquivo está faltando: en.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: ru.MESSAGE_TEXT_ERR7 =Обновление отменено. Не удалось удалить папку: @@ -62,6 +69,7 @@ de.MESSAGE_TEXT_ERR7 =Update abgebrochen. Ordner kann nicht gelöscht werden: es.MESSAGE_TEXT_ERR7 =Actualización cancelada. No se puede eliminar la carpeta: fr.MESSAGE_TEXT_ERR7 =Mise à jour annulée. Impossible de supprimer le dossier : it.MESSAGE_TEXT_ERR7 =Aggiornamento annullato. Impossibile eliminare la cartella: +pt_BR.MESSAGE_TEXT_ERR7 =Atualização cancelada. Não é possível excluir a pasta: en.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: ru.MESSAGE_TEXT_ERR8 =Обновление отменено. Приложение не закрыто: @@ -70,6 +78,7 @@ de.MESSAGE_TEXT_ERR8 =Update abgebrochen. Die App ist nicht geschlossen: es.MESSAGE_TEXT_ERR8 =Actualización cancelada. El programa no está cerrado: fr.MESSAGE_TEXT_ERR8 =Mise à jour annulée. L'application n'est pas fermée : it.MESSAGE_TEXT_ERR8 =Aggiornamento annullato. Il programma non è chiuso: +pt_BR.MESSAGE_TEXT_ERR8 =Atualização cancelada. O programa não está fechado: en.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: ru.MESSAGE_TEXT_ERR9 =Обновление отменено. Не удалось создать папку: @@ -78,6 +87,7 @@ de.MESSAGE_TEXT_ERR9 =Update abgebrochen. Ordner kann nicht erstellt werden: es.MESSAGE_TEXT_ERR9 =Actualización cancelada. No se puede crear la carpeta: fr.MESSAGE_TEXT_ERR9 =Mise à jour annulée. Impossible de créer un dossier : it.MESSAGE_TEXT_ERR9 =Aggiornamento annullato. Impossibile creare la cartella: +pt_BR.MESSAGE_TEXT_ERR9 =Atualização cancelada. Não é possível criar a pasta: en.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: ru.MESSAGE_TEXT_ERR10 =Обновление отменено. Не удалось переместить файлы в резервную копию: @@ -86,6 +96,7 @@ de.MESSAGE_TEXT_ERR10 =Update abgebrochen. Die zu sichernden Dateien können nic es.MESSAGE_TEXT_ERR10 =Actualización cancelada. No se pueden reemplazar los archivos en la copia de seguridad: fr.MESSAGE_TEXT_ERR10 =Mise à jour annulée. Impossible de remplacer les fichiers par des fichiers de sauvegarde : it.MESSAGE_TEXT_ERR10 =Aggiornamento annullato. Impossibile spostare i file nel backup: +pt_BR.MESSAGE_TEXT_ERR10 =Atualização cancelada. Não é possível substituir arquivos para backup: en.MESSAGE_TEXT_ERR11 =Can't restore files from backup! ru.MESSAGE_TEXT_ERR11 =Не удалось восстановить файлы из резервной копии! @@ -94,6 +105,7 @@ de.MESSAGE_TEXT_ERR11 =Dateien können nicht aus dem Backup wiederhergestellt we es.MESSAGE_TEXT_ERR11 =¡No se pueden restaurar los archivos de la copia de seguridad! fr.MESSAGE_TEXT_ERR11 =Impossible de restaurer des fichiers à partir d'une sauvegarde ! it.MESSAGE_TEXT_ERR11 =Impossibile ripristinare i file dal backup! +pt_BR.MESSAGE_TEXT_ERR11 =Não é possível restaurar arquivos do backup! en.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: ru.MESSAGE_TEXT_ERR12 =Обновление отменено. Не удалось переместить обновления в папку приложения: @@ -102,6 +114,7 @@ de.MESSAGE_TEXT_ERR12 =Update abgebrochen. Updates können nicht in den App-Pfad es.MESSAGE_TEXT_ERR12 =Actualización cancelada. No se pueden mover las actualizaciones a la ruta de la aplicación: fr.MESSAGE_TEXT_ERR12 =Mise à jour annulée. Impossible de déplacer les mises à jour vers le chemin d'accès à l'application : it.MESSAGE_TEXT_ERR12 =Aggiornamento annullato. Impossibile spostare gli aggiornamenti nel percorso dell'app: +pt_BR.MESSAGE_TEXT_ERR12 =Atualização cancelada. Não é possível mover as atualizações para o caminho do aplicativo: en.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: ru.MESSAGE_TEXT_ERR13 =Произошла ошибка при удалении папки приложения: @@ -110,6 +123,7 @@ de.MESSAGE_TEXT_ERR13 =Beim Entfernen des App-Pfads ist ein Fehler aufgetreten: es.MESSAGE_TEXT_ERR13 =Se ha producido un error al eliminar la ruta de la aplicación: fr.MESSAGE_TEXT_ERR13 =Une erreur s'est produite lors de la suppression du chemin d'accès à l'application : it.MESSAGE_TEXT_ERR13 =Si è verificato un errore durante la rimozione del percorso dell'app: +pt_BR.MESSAGE_TEXT_ERR13 =Ocorreu um erro ao remover o caminho do aplicativo: en.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: ru.MESSAGE_TEXT_ERR14 =Произошла ошибка при восстановлении файлов из резервной копии: @@ -118,6 +132,7 @@ de.MESSAGE_TEXT_ERR14 =Bei der Wiederherstellung von Dateien aus dem Backup ist es.MESSAGE_TEXT_ERR14 =Se ha producido un error al restaurar los archivos de la copia de seguridad: fr.MESSAGE_TEXT_ERR14 =Une erreur s'est produite lors de la restauration des fichiers à partir de la sauvegarde : it.MESSAGE_TEXT_ERR14 =Si è verificato un errore durante il ripristino dei file dal backup: +pt_BR.MESSAGE_TEXT_ERR14 =Ocorreu um erro ao restaurar arquivos do backup: en.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! ru.MESSAGE_TEXT_ERR15 =Произошла ошибка при перезапуске приложения! @@ -126,6 +141,7 @@ de.MESSAGE_TEXT_ERR15 =Beim Neustart der App ist ein Fehler aufgetreten! es.MESSAGE_TEXT_ERR15 =¡Se ha producido un error al reiniciar el programa! fr.MESSAGE_TEXT_ERR15 =Une erreur s'est produite lors du redémarrage de l'application ! it.MESSAGE_TEXT_ERR15 =Si è verificato un errore durante il riavvio del programma! +pt_BR.MESSAGE_TEXT_ERR15 =Ocorreu um erro ao reiniciar o programa! en.MESSAGE_TEXT_ERR16 =SDL init error: ru.MESSAGE_TEXT_ERR16 =Ошибка инициализации SDL: @@ -134,6 +150,7 @@ de.MESSAGE_TEXT_ERR16 =Fehler bei der SDL-Initialisierung: es.MESSAGE_TEXT_ERR16 =Error de inicio SDL: fr.MESSAGE_TEXT_ERR16 =Erreur d'initialisation SDL : it.MESSAGE_TEXT_ERR16 =Errore di inizializzazione SDL: +pt_BR.MESSAGE_TEXT_ERR16 =Erro de inicialização SDL: en.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: ru.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher вернул ошибку: @@ -141,4 +158,5 @@ ar_SA.MESSAGE_TEXT_ERR17 =خطأ من ServiceCtrlDispatcher: de.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hat einen Fehler zurückgegeben: es.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha devuelto un error: fr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher a renvoyé une erreur : -it.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha restituito un errore: \ No newline at end of file +it.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha restituito un errore: +pt_BR.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: \ No newline at end of file From b17e94cc2bb039dc0c702bce031f45091493aafc Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 8 Dec 2023 11:39:43 +0300 Subject: [PATCH 03/16] [macos] added Arabic language --- macos/ONLYOFFICE.xcodeproj/project.pbxproj | 21 +- .../ar-SA.lproj/InfoPlist.strings | 6 + .../ar-SA.lproj/InfoPlist.strings | 6 + .../ar-SA.lproj/InfoPlist.strings | 6 + .../ar-SA.lproj/Document-Sign.strings | 39 ++ .../ar-SA.lproj/Localizable.strings | 234 +++++++++ .../ar-SA.lproj/Localizable.stringsdict | 85 ++++ macos/ONLYOFFICE/ar-SA.lproj/Main.strings | 456 ++++++++++++++++++ .../ar-SA.lproj/MoveApplication.strings | 24 + .../ar-SA.lproj/Presentation-Reporter.strings | 3 + 10 files changed, 878 insertions(+), 2 deletions(-) create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/ar-SA.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/ar-SA.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/ar-SA.lproj/InfoPlist.strings create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/Document-Sign.strings create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/Localizable.strings create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/Localizable.stringsdict create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/Main.strings create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/MoveApplication.strings create mode 100644 macos/ONLYOFFICE/ar-SA.lproj/Presentation-Reporter.strings diff --git a/macos/ONLYOFFICE.xcodeproj/project.pbxproj b/macos/ONLYOFFICE.xcodeproj/project.pbxproj index 1f50b2969..0567dad19 100644 --- a/macos/ONLYOFFICE.xcodeproj/project.pbxproj +++ b/macos/ONLYOFFICE.xcodeproj/project.pbxproj @@ -781,6 +781,15 @@ 5AAFF0A62989B70400D433B5 /* si */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = si; path = si.lproj/InfoPlist.strings; sourceTree = ""; }; 5AB20F5D274D35F2003732A0 /* file-docxf.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "file-docxf.icns"; sourceTree = ""; }; 5AB20F61274D360A003732A0 /* file-oform.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "file-oform.icns"; sourceTree = ""; }; + 5ABE02512B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/Document-Sign.strings"; sourceTree = ""; }; + 5ABE02522B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/Localizable.strings"; sourceTree = ""; }; + 5ABE02532B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "ar-SA"; path = "ar-SA.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 5ABE02542B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/Main.strings"; sourceTree = ""; }; + 5ABE02552B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/MoveApplication.strings"; sourceTree = ""; }; + 5ABE02562B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/Presentation-Reporter.strings"; sourceTree = ""; }; + 5ABE02572B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/InfoPlist.strings"; sourceTree = ""; }; + 5ABE02582B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/InfoPlist.strings"; sourceTree = ""; }; + 5ABE02592B22699F0031328E /* ar-SA */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "ar-SA"; path = "ar-SA.lproj/InfoPlist.strings"; sourceTree = ""; }; 5AD24E292902AE3C00748926 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Vendor/Sparkle/Sparkle.framework; sourceTree = SOURCE_ROOT; }; BE6251B922BD089100656116 /* dictionaries */ = {isa = PBXFileReference; lastKnownFileType = folder; name = dictionaries; path = ../../../../dictionaries; sourceTree = ""; }; BE95F0A623E9FF590045E0CB /* mac_cefview.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mac_cefview.h; sourceTree = ""; }; @@ -1919,6 +1928,7 @@ si, nb, "zh-Hant-TW", + "ar-SA", ); mainGroup = FCBC425F1B9D650400405301; productRefGroup = FCBC42691B9D650400405301 /* Products */; @@ -2536,6 +2546,7 @@ 5AAFF0A32989B70400D433B5 /* si */, 5A9AC2A929AEB1E100B6A250 /* nb */, 5A4ECA6A2AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02562B22699F0031328E /* ar-SA */, ); name = "Presentation-Reporter.storyboard"; sourceTree = ""; @@ -2583,6 +2594,7 @@ 5AAFF0A22989B70400D433B5 /* si */, 5A9AC2A829AEB1E100B6A250 /* nb */, 5A4ECA692AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02552B22699F0031328E /* ar-SA */, ); name = MoveApplication.strings; sourceTree = ""; @@ -2670,7 +2682,7 @@ 5A7F872D27A346DA006B6E27 /* uk-UA */, 5A7F874227A3478C006B6E27 /* ja-JP */, 5AAFF0A62989B70400D433B5 /* si */, - 5AC517712AA7D8DE00556F12 /* en */, + 5ABE02592B22699F0031328E /* ar-SA */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2758,7 +2770,7 @@ 5A7F870A27A340D5006B6E27 /* uk-UA */, 5A7F874327A348BB006B6E27 /* ja-JP */, 5AAFF0A52989B70400D433B5 /* si */, - 5AC517702AA7D8DE00556F12 /* en */, + 5ABE02582B22699F0031328E /* ar-SA */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2847,6 +2859,7 @@ 5A7F874827A34A06006B6E27 /* ja-JP */, 5AAFF0A42989B70400D433B5 /* si */, 5A9AC2AA29AEB1F000B6A250 /* nb */, + 5ABE02572B22699F0031328E /* ar-SA */, ); name = InfoPlist.strings; sourceTree = ""; @@ -2894,6 +2907,7 @@ 5AAFF0A12989B70400D433B5 /* si */, 5A9AC2A729AEB1E100B6A250 /* nb */, 5A4ECA682AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02542B22699F0031328E /* ar-SA */, ); name = Main.storyboard; sourceTree = ""; @@ -2941,6 +2955,7 @@ 5AAFF0A02989B70400D433B5 /* si */, 5A9AC2A629AEB1E100B6A250 /* nb */, 5A4ECA672AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02532B22699F0031328E /* ar-SA */, ); name = Localizable.stringsdict; sourceTree = ""; @@ -2988,6 +3003,7 @@ 5AAFF09E2989B70400D433B5 /* si */, 5A9AC2A429AEB1E100B6A250 /* nb */, 5A4ECA652AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02512B22699F0031328E /* ar-SA */, ); name = "Document-Sign.storyboard"; sourceTree = ""; @@ -3035,6 +3051,7 @@ 5AAFF09F2989B70400D433B5 /* si */, 5A9AC2A529AEB1E100B6A250 /* nb */, 5A4ECA662AA88CB900286D52 /* zh-Hant-TW */, + 5ABE02522B22699F0031328E /* ar-SA */, ); name = Localizable.strings; sourceTree = ""; diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/ar-SA.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/ar-SA.lproj/InfoPlist.strings new file mode 100644 index 000000000..44b2d6769 --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-arm/ar-SA.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "أونلي أوفيس"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "الحقوق جميعها محفوظة 2023 © أسينسو سيستم."; + diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/ar-SA.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/ar-SA.lproj/InfoPlist.strings new file mode 100644 index 000000000..44b2d6769 --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-v8/ar-SA.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "أونلي أوفيس"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "الحقوق جميعها محفوظة 2023 © أسينسو سيستم."; + diff --git a/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/ar-SA.lproj/InfoPlist.strings b/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/ar-SA.lproj/InfoPlist.strings new file mode 100644 index 000000000..44b2d6769 --- /dev/null +++ b/macos/ONLYOFFICE/Resources/ONLYOFFICE-x86_64/ar-SA.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle name */ +"CFBundleName" = "أونلي أوفيس"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "الحقوق جميعها محفوظة 2023 © أسينسو سيستم."; + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/Document-Sign.strings b/macos/ONLYOFFICE/ar-SA.lproj/Document-Sign.strings new file mode 100644 index 000000000..afa06a4b7 --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/Document-Sign.strings @@ -0,0 +1,39 @@ +/* Class = "NSTextFieldCell"; title = "Enter the password for the private key."; ObjectID = "1dL-nN-bJI"; */ +"1dL-nN-bJI.title" = "ادخل كلمة مرور مفتاح التشفير الخاص"; + +/* Class = "NSTextFieldCell"; title = "Enter the password for the digital signature."; ObjectID = "1Fy-mg-aq9"; */ +"1Fy-mg-aq9.title" = "ادخل كلمة مرور التوقيع الرقمي."; + +/* Class = "NSTextFieldCell"; title = "Specify the digital signature file for the document."; ObjectID = "2Ck-6y-ygx"; */ +"2Ck-6y-ygx.title" = "حدّد ملف التوقيع الرقمي للمستند."; + +/* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "4gA-s8-Lne"; */ +"4gA-s8-Lne.placeholderString" = "ادخل كلمة المرور"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "GOU-av-TC1"; */ +"GOU-av-TC1.title" = "إلغاء"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "jpH-3g-Gt5"; */ +"jpH-3g-Gt5.title" = "إلغاء"; + +/* Class = "NSButtonCell"; title = "Load a Private Key"; ObjectID = "P3k-kI-w22"; */ +"P3k-kI-w22.title" = "فتح مفتاح التشفير الخاص"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "qZ4-0O-L0G"; */ +"qZ4-0O-L0G.title" = "إلغاء"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "RbM-Dq-A3K"; */ +"RbM-Dq-A3K.title" = "إلغاء"; + +/* Class = "NSTextFieldCell"; title = "Specify a private key for the digital signature."; ObjectID = "Tfc-EF-VnS"; */ +"Tfc-EF-VnS.title" = "حدّد مفتاح التشفير الخاص للتوقيع الرقمي"; + +/* Class = "NSButtonCell"; title = "Load Signature"; ObjectID = "tTF-wa-eJp"; */ +"tTF-wa-eJp.title" = "فتح التوقيع"; + +/* Class = "NSWindow"; title = "Window"; ObjectID = "uKp-p4-6uB"; */ +"uKp-p4-6uB.title" = "نافذة"; + +/* Class = "NSSecureTextFieldCell"; placeholderString = "Enter Password"; ObjectID = "Zj5-0h-hpW"; */ +"Zj5-0h-hpW.placeholderString" = "ادخل كلمة المرور"; + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/Localizable.strings b/macos/ONLYOFFICE/ar-SA.lproj/Localizable.strings new file mode 100644 index 000000000..f3b62a31b --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/Localizable.strings @@ -0,0 +1,234 @@ +/* No comment provided by engineer. */ +"%@ Help" = "%@ مساعدة"; + +/* No comment provided by engineer. */ +"About %@" = "عن %@"; + +/* No comment provided by engineer. */ +"Acknowledgments" = "شكر وتقدير لـ"; + +/* No comment provided by engineer. */ +"Before signing the document, it must be saved." = "لإجراء توقيع المستند، يجب الحفظ أولًا"; + +/* No comment provided by engineer. */ +"Cancel" = "إلغاء"; + +/* No comment provided by engineer. */ +"Cannot open file of Digital Signature" = "غير قادر على فتح ملف التوقيع الرقمي"; + +/* No comment provided by engineer. */ +"Cannot open file of Private Key" = "غير قادر على فتح ملف مفتاح التشفير الخاص"; + +/* No comment provided by engineer. */ +"Cannot open folder of the file location." = "غير قادر على فتح المجلد للمكان المختار"; + +/* No comment provided by engineer. */ +"Comma-Separated Values" = "قيم مفرّقة بفاصلة (*.csv)"; + +/* No comment provided by engineer. */ +"Create portal" = "إنشاء بوابة سحابية"; + +/* No comment provided by engineer. */ +"Delete and Quit" = "حذف وخروج"; + +/* No comment provided by engineer. */ +"DjVu File" = "مستند رقمي (*.djvu)"; + +/* No comment provided by engineer. */ +"Do you want to save the changes made to the document \"%@\"?" = "هل تريد حفظ التغييرات للمستند \"%@\"؟"; + +/* No comment provided by engineer. */ +"Document %ld.docx" = "مستند %ld.docx"; + +/* No comment provided by engineer. */ +"Document %ld.docxf" = "مستند %ld.docxf"; + +/* No comment provided by engineer. */ +"Document template" = "قالب وورد (*.dotx)"; + +/* No comment provided by engineer. */ +"Don't Save" = "عدم الحفظ"; + +/* No comment provided by engineer. */ +"Excel 97-2003 Spreadsheet" = "جدول إكسل 97-2003 (*.xls)"; + +/* No comment provided by engineer. */ +"Excel 2007 Spreadsheet" = "جدول إكسل (*.xlsx)"; + +/* No comment provided by engineer. */ +"FictionBook File" = "ملف فكشنبوك 2 (*.fb2)"; + +/* No comment provided by engineer. */ +"File \"%@\" can not be open or not exist." = "\"%@\" غير قابل للفتح أو غير موجود."; + +/* No comment provided by engineer. */ +"File can not be open." = "غير قادر على فتح الملف."; + +/* No comment provided by engineer. */ +"File Format:" = "صيغة الملف:"; + +/* No comment provided by engineer. */ +"Hide %@" = "إخفاء %@"; + +/* No comment provided by engineer. */ +"If you don't review your documents, all your changeses will be lost." = "إن لم تراجع مستنداتك، فستخسر التغييرات."; + +/* No comment provided by engineer. */ +"If you have already purchased %@, you should find your activation key in an email confirmation." = "إن قمت بشراء %@ من قبل، فسوف تجد رمز التفعيل في رسالة تأكيدية بالبريد الإلكتروني."; + +/* No comment provided by engineer. */ +"License Agreement" = "الموافقة على الترخيص"; + +/* No comment provided by engineer. */ +"Macro-enabled Presentation" = "عرض بوربوينت مع خاصية الماكرو (*.pptm)"; + +/* No comment provided by engineer. */ +"Macro-enabled spreadsheet template" = "قالب جدول إكسيل مع خاصية الماكرو (*.xltm)"; + +/* No comment provided by engineer. */ +"Mobipocket e-book" = "ملف موبي بوكيت (*.mobi)"; + +/* No comment provided by engineer. */ +"new-document" = "مستند جديد"; + +/* No comment provided by engineer. */ +"new-presentation" = "عرض تقديمي جديد"; + +/* No comment provided by engineer. */ +"new-spreadsheet" = "جدول بياني جديد"; + +/* No comment provided by engineer. */ +"No" = "لا"; + +/* No comment provided by engineer. */ +"OK" = "حسنًا"; + +/* No comment provided by engineer. */ +"ONLYOFFICE can not open the Digital Signature file. Try opening another file." = "أونلي أوفيس غير قادر على فتح ملف التوقيع الرقمي. جرّب ملفًّا آخر."; + +/* No comment provided by engineer. */ +"ONLYOFFICE can not open the Private Key. Try opening another file." = "أونلي أوفيس غير قادر على فتح مفتاح التشفير الخاص. جرّب ملفًّا آخر."; + +/* No comment provided by engineer. */ +"OpenDocument Document Template" = "مستند ليبري أوفس (*.ott)"; + +/* No comment provided by engineer. */ +"OpenDocument Presentation Template" = "قالب عرض ليبري أوفس (*.otp)"; + +/* No comment provided by engineer. */ +"OpenDocument Spreadsheet Template" = "قالب جدول ليبري أوفس (*.ots)"; + +/* No comment provided by engineer. */ +"Opening" = "جاري الفتح"; + +/* No comment provided by engineer. */ +"OpenOffice Document" = "ملف نصي ليبري أوفس (*.odt)"; + +/* No comment provided by engineer. */ +"OpenOffice Presentation" = "عرض ليبري أوفس (*.odp)"; + +/* No comment provided by engineer. */ +"OpenOffice Spreadsheet" = "جدول ليبري أوفس (*.ods)"; + +/* No comment provided by engineer. */ +"PDF File" = "بي دي إف (*.pdf)"; + +/* No comment provided by engineer. */ +"PDF/A File" = "بي دي إف طويل الأجل (*.pdf)"; + +/* No comment provided by engineer. */ +"Plain Text" = "ملف نصي (*.txt)"; + +/* No comment provided by engineer. */ +"PowerPoint 97-2003 Presentation" = "عرض بوربوينت 97-2003 (*.ppt)"; + +/* No comment provided by engineer. */ +"PowerPoint 2007 Presentation" = "عرض بوربوينت قابل للتعديل (*.pptx)"; + +/* No comment provided by engineer. */ +"PowerPoint Slide Show" = "عرض بوربوينت غير قابل للتعديل (*.ppsx)"; + +/* No comment provided by engineer. */ +"Preparing..." = "تجهيز..."; + +/* No comment provided by engineer. */ +"Presentation %ld.pptx" = "عرض %ld.pptx"; + +/* No comment provided by engineer. */ +"Presentation template" = "قالب عرض بوربوينت (*.potx)"; + +/* No comment provided by engineer. */ +"Presenter View" = "وضع إلقاء العرض"; + +/* No comment provided by engineer. */ +"Quit %@" = "خروج من %@"; + +/* No comment provided by engineer. */ +"Review Changes..." = "مراجعة التغييرات..."; + +/* No comment provided by engineer. */ +"Rich Text Document" = "ملف نصي غني (*.rtf)"; + +/* No comment provided by engineer. */ +"Save" = "حفظ"; + +/* No comment provided by engineer. */ +"Save the document?" = "حفظ المستند؟"; + +/* No comment provided by engineer. */ +"Signature Details" = "معلومات التوقيع"; + +/* No comment provided by engineer. */ +"Spreadsheet %ld.xlsx" = "جدول %ld.xlsx"; + +/* No comment provided by engineer. */ +"Spreadsheet template" = "قالب جدول إكسل (*.xltx)"; + +/* No comment provided by engineer. */ +"Thank you for evaluating %@!" = "شكرًا على تقييم %@!"; + +/* No comment provided by engineer. */ +"The document \"%@\" must be built. Continue?" = "المستند \"%@\" يجب بناؤه. استمر؟"; + +/* No comment provided by engineer. */ +"To open the file location, it must be saved." = "لفتح مكان الملف، يجب الحفظ."; + +/* No comment provided by engineer. */ +"Unconfirmed" = "غير مؤكد"; + +/* No comment provided by engineer. */ +"Untitled" = "بدون عنوان"; + +/* No comment provided by engineer. */ +"Web Page" = "صفحة ويب"; + +/* No comment provided by engineer. */ +"With access to pro features" = "مع صلاحية استخدام للميزات المدفوعة"; + +/* No comment provided by engineer. */ +"Word 97-2003 Document" = "مستند وورد 97-2003 (*.doc)"; + +/* No comment provided by engineer. */ +"Word 2007 Document" = "مستند وورد (*.docx)"; + +/* No comment provided by engineer. */ +"XML Paper Specification" = "مستند أوبن إكس بي إس (*.xps)"; + +/* No comment provided by engineer. */ +"Yes" = "نعم"; + +/* No comment provided by engineer. */ +"You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting?" = "لديك %1$ld %2$@ مستندات بتغييرات غير مؤكدة. هل تريد مراجعة التغييرات قبل الخروج؟"; + +/* No comment provided by engineer. */ +"You have successfully activated %@." = "لقد تم تفعيل %@."; + +/* No comment provided by engineer. */ +"Your changes will be lost if you don’t save them." = "سوف يتم فقد التغييرات إن لم تقم بالحفظ."; + +/* No comment provided by engineer. */ +"Your subscription has expired.\n\nThe program works in the non-activated mode.\n\nNow you can prolong or upgrade your subscription with a discount." = "لقد انتهى اشتراكك.\n\nالبرنامج يعمل في وضع عدم التفعيل.\n\nالآن يمكنك تجديد أو تطوير اشتراكك مع خصم."; + +/* No comment provided by engineer. */ +"Your subscription is about to expire\n(%d days left).\n\nWe have a special offer for you." = "اشتراكك على وشك الانتهاء\n(%d أيام متبقية).\n\nلدينا عرض خاص لك."; + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/Localizable.stringsdict b/macos/ONLYOFFICE/ar-SA.lproj/Localizable.stringsdict new file mode 100644 index 000000000..5e7dd4c47 --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/Localizable.stringsdict @@ -0,0 +1,85 @@ + + + + + %d days are left until the license expiration. + + NSStringLocalizedFormatKey + %#@أيام@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + few + %d days are left until the license expiration. + many + %d days are left until the license expiration. + one + %d يوم متبقي لانتهاء الترخيص. + other + %d أيام متبقية لانتهاء الترخيص. + two + %d days are left until the license expiration. + zero + %d days are left until the license expiration. + + + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + + NSStringLocalizedFormatKey + %#@أيام@ + days + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + d + few + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + many + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + one + أنت تستخدم نسخة تجريبية من التطبيق. +مدة التجريب ستنتهي بعد %d يوم، بعدها لن تستطيع أن تنشئ أو تعدل على المستندات. + other + أنت تستخدم نسخة تجريبية من التطبيق. +مدة التجريب ستنتهي بعد %d أيام، بعدها لن تستطيع أن تنشئ أو تعدل على المستندات. + two + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + zero + You are using a trial version of the application. +The trial period will end in %d days, after that you will not be able to create and edit documents. + + + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + + NSStringLocalizedFormatKey + %#@مستندات@ + documents + + NSStringFormatSpecTypeKey + NSStringPluralRuleType + NSStringFormatValueTypeKey + ld + few + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + many + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + one + لديك %ld %@ مستند بتغييرات غير مؤكدة. هل تريد مراجعة التغييرات قبل الخروج؟ + other + لديك %ld %@ مستندات بتغييرات غير مؤكدة. هل تريد مراجعة التغييرات قبل الخروج؟ + two + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + zero + You have %ld %@ documents with unconfirmed changes. Do you want to review these changes before quitting? + + + + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/Main.strings b/macos/ONLYOFFICE/ar-SA.lproj/Main.strings new file mode 100644 index 000000000..c7bf380b8 --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/Main.strings @@ -0,0 +1,456 @@ +/* Class = "NSMenu"; title = "Find"; ObjectID = "1b7-l0-nxx"; */ +"1b7-l0-nxx.title" = "بحث"; + +/* Class = "NSMenuItem"; title = "Lower"; ObjectID = "1tx-W0-xDw"; */ +"1tx-W0-xDw.title" = "تصغير"; + +/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "1UK-8n-QPP"; */ +"1UK-8n-QPP.title" = "تخصيص شريط الأدوات"; + +/* Class = "NSMenuItem"; title = "ONLYOFFICE"; ObjectID = "1Xt-HY-uBw"; */ +"1Xt-HY-uBw.title" = "أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Raise"; ObjectID = "2h7-ER-AoG"; */ +"2h7-ER-AoG.title" = "رفع"; + +/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "2oI-Rn-ZJC"; */ +"2oI-Rn-ZJC.title" = "تحويلات"; + +/* Class = "NSMenu"; title = "Spelling"; ObjectID = "3IN-sU-3Bg"; */ +"3IN-sU-3Bg.title" = "إملاء"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "3Om-Ey-2VK"; */ +"3Om-Ey-2VK.title" = "استخدم الافتراضي"; + +/* Class = "NSMenu"; title = "Speech"; ObjectID = "3rS-ZA-NoH"; */ +"3rS-ZA-NoH.title" = "تحدُّث"; + +/* Class = "NSMenuItem"; title = "Find"; ObjectID = "4EN-yA-p0u"; */ +"4EN-yA-p0u.title" = "بحث"; + +/* Class = "NSMenuItem"; title = "License Agreement"; ObjectID = "4et-TX-a4m"; */ +"4et-TX-a4m.title" = "الموافقة على الترخيص"; + +/* Class = "NSMenuItem"; title = "Quit ONLYOFFICE"; ObjectID = "4sb-4s-VLi"; */ +"4sb-4s-VLi.title" = "خروج من أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "About ONLYOFFICE"; ObjectID = "5kV-Vb-QxS"; */ +"5kV-Vb-QxS.title" = "عن أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "5QF-Oa-p0T"; */ +"5QF-Oa-p0T.title" = "تعديل"; + +/* Class = "NSMenuItem"; title = "Copy Style"; ObjectID = "5Vv-lz-BsD"; */ +"5Vv-lz-BsD.title" = "نسخ التنسيق"; + +/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "6dh-zS-Vam"; */ +"6dh-zS-Vam.title" = "إعادة"; + +/* Class = "NSButtonCell"; title = "License agreement"; ObjectID = "8Ga-Cu-VGe"; */ +"8Ga-Cu-VGe.title" = "الموافقة على الترخيص"; + +/* Class = "NSMenu"; title = "Writing Direction"; ObjectID = "8mr-sm-Yjd"; */ +"8mr-sm-Yjd.title" = "اتجاه الكتابة"; + +/* Class = "NSMenuItem"; title = "New"; ObjectID = "9aQ-wl-gjS"; */ +"9aQ-wl-gjS.title" = "جديد"; + +/* Class = "NSTextFieldCell"; title = "none"; ObjectID = "9i7-kj-42B"; */ +"9i7-kj-42B.title" = "لا شيء"; + +/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "9ic-FL-obx"; */ +"9ic-FL-obx.title" = "بدائل"; + +/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "9yt-4B-nSM"; */ +"9yt-4B-nSM.title" = "نسخ/لصق ذكي"; + +/* Class = "NSMenuItem"; title = "Tighten"; ObjectID = "46P-cB-AYj"; */ +"46P-cB-AYj.title" = "تضييق"; + +/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "78Y-hA-62v"; */ +"78Y-hA-62v.title" = "تصحيح تلقائي"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "agt-UL-0e3"; */ +"agt-UL-0e3.title" = "استخدم الافتراضي"; + +/* Class = "NSMenuItem"; title = "Print…"; ObjectID = "aTl-1u-JFS"; */ +"aTl-1u-JFS.title" = "طباعة..."; + +/* Class = "NSMenuItem"; title = "Window"; ObjectID = "aUF-d1-5bR"; */ +"aUF-d1-5bR.title" = "نافذة"; + +/* Class = "NSMenu"; title = "Font"; ObjectID = "aXa-aM-Jaq"; */ +"aXa-aM-Jaq.title" = "خط"; + +/* Class = "NSMenu"; title = "Main Menu"; ObjectID = "AYu-sK-qS6"; */ +"AYu-sK-qS6.title" = "القائمة الرئيسية"; + +/* Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "BgM-ve-c93"; */ +"BgM-ve-c93.title" = "\tمن اليسار إلى اليمين"; + +/* Class = "NSMenuItem"; title = "Show Colors"; ObjectID = "bgn-CT-cEk"; */ +"bgn-CT-cEk.title" = "إظهار الألوان"; + +/* Class = "NSMenu"; title = "File"; ObjectID = "bib-Uj-vzu"; */ +"bib-Uj-vzu.title" = "ملف"; + +/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "BOF-NM-1cW"; */ +"BOF-NM-1cW.title" = "تفضيلات..."; + +/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "buJ-ug-pKt"; */ +"buJ-ug-pKt.title" = "استخدم النص المحدد للبحث"; + +/* Class = "NSMenuItem"; title = "Save As…"; ObjectID = "Bw7-FT-i3A"; */ +"Bw7-FT-i3A.title" = "حفظ باسم..."; + +/* Class = "NSMenu"; title = "Transformations"; ObjectID = "c8a-y6-VQd"; */ +"c8a-y6-VQd.title" = "تحويلات"; + +/* Class = "NSMenuItem"; title = "Use None"; ObjectID = "cDB-IK-hbR"; */ +"cDB-IK-hbR.title" = "استخدم لا شيء"; + +/* Class = "NSMenuItem"; title = "Acknowledgments"; ObjectID = "CJU-dx-a9l"; */ +"CJU-dx-a9l.title" = "شكر وتقدير لـ"; + +/* Class = "NSMenuItem"; title = "Selection"; ObjectID = "cqv-fj-IhA"; */ +"cqv-fj-IhA.title" = "اختيار"; + +/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "cwL-P1-jid"; */ +"cwL-P1-jid.title" = "الروابط الذكية"; + +/* Class = "NSMenu"; title = "Text"; ObjectID = "d9c-me-L2H"; */ +"d9c-me-L2H.title" = "نص"; + +/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "d9M-CD-aMd"; */ +"d9M-CD-aMd.title" = "تصغير الأحرف الإنجليزية"; + +/* Class = "NSMenuItem"; title = "File"; ObjectID = "dMs-cI-mzQ"; */ +"dMs-cI-mzQ.title" = "ملف"; + +/* Class = "NSMenuItem"; title = "Spreadsheet"; ObjectID = "DOj-j9-dza"; */ +"DOj-j9-dza.title" = "جدول"; + +/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "dRJ-4n-Yzg"; */ +"dRJ-4n-Yzg.title" = "تراجع"; + +/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "Dv1-io-Yv7"; */ +"Dv1-io-Yv7.title" = "تدقيق وإملاء"; + +/* Class = "NSMenuItem"; title = "Close"; ObjectID = "DVo-aG-piG"; */ +"DVo-aG-piG.title" = "إغلاق"; + +/* Class = "NSMenu"; title = "Help"; ObjectID = "F2S-fz-NVQ"; */ +"F2S-fz-NVQ.title" = "مساعدة"; + +/* Class = "NSMenuItem"; title = "Text"; ObjectID = "Fal-I4-PZk"; */ +"Fal-I4-PZk.title" = "نص"; + +/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "FeM-D8-WVr"; */ +"FeM-D8-WVr.title" = "بدائل"; + +/* Class = "NSMenuItem"; title = "Product Help"; ObjectID = "FKE-Sm-Kum"; */ +"FKE-Sm-Kum.title" = "مساعدة حول المنتج"; + +/* Class = "NSTextFieldCell"; title = "User Name"; ObjectID = "FoF-wl-Dxi"; */ +"FoF-wl-Dxi.title" = "اسم المستخدم"; + +/* Class = "NSMenuItem"; title = "Bold"; ObjectID = "GB9-OM-e27"; */ +"GB9-OM-e27.title" = "عريض"; + +/* Class = "NSMenu"; title = "Format"; ObjectID = "GEO-Iw-cKr"; */ +"GEO-Iw-cKr.title" = "تنسيق"; + +/* Class = "NSMenuItem"; title = "Font"; ObjectID = "Gi5-1S-RQB"; */ +"Gi5-1S-RQB.title" = "خط"; + +/* Class = "NSTextFieldCell"; title = "File Name"; ObjectID = "gm3-6i-EnL"; */ +"gm3-6i-EnL.title" = "اسم الملف"; + +/* Class = "NSMenuItem"; title = "Use Default"; ObjectID = "GUa-eO-cwY"; */ +"GUa-eO-cwY.title" = "استخدم الافتراضي"; + +/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "gVA-U4-sdL"; */ +"gVA-U4-sdL.title" = "لصق"; + +/* Class = "NSMenuItem"; title = "Writing Direction"; ObjectID = "H1b-Si-o9J"; */ +"H1b-Si-o9J.title" = "اتجاه الكتابة"; + +/* Class = "NSMenuItem"; title = "View"; ObjectID = "H8h-7b-M4v"; */ +"H8h-7b-M4v.title" = "عرض"; + +/* Class = "NSMenu"; title = "New"; ObjectID = "hD5-Cz-ItX"; */ +"hD5-Cz-ItX.title" = "جديد"; + +/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "HFo-cy-zxI"; */ +"HFo-cy-zxI.title" = "إظهار التدقيق الإملائي"; + +/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "HFQ-gK-NFA"; */ +"HFQ-gK-NFA.title" = "استبدال نص"; + +/* Class = "NSMenuItem"; title = "Presentation"; ObjectID = "hkB-TU-Ps1"; */ +"hkB-TU-Ps1.title" = "عرض"; + +/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "hQb-2v-fYv"; */ +"hQb-2v-fYv.title" = "الاقتباسات الذكية"; + +/* Class = "NSMenu"; title = "View"; ObjectID = "HyV-fh-RgO"; */ +"HyV-fh-RgO.title" = "عرض"; + +/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "hz2-CU-CR7"; */ +"hz2-CU-CR7.title" = "التحقق من المستند الآن"; + +/* Class = "NSMenu"; title = "Services"; ObjectID = "hz9-B4-Xy5"; */ +"hz9-B4-Xy5.title" = "خدمات"; + +/* Class = "NSMenuItem"; title = "Subscript"; ObjectID = "I0S-gh-46l"; */ +"I0S-gh-46l.title" = "تحت السطر"; + +/* Class = "NSMenuItem"; title = "Smaller"; ObjectID = "i1d-Er-qST"; */ +"i1d-Er-qST.title" = "أصغر"; + +/* Class = "NSMenuItem"; title = "Open…"; ObjectID = "IAo-SY-fd9"; */ +"IAo-SY-fd9.title" = "فتح..."; + +/* Class = "NSMenu"; title = "Baseline"; ObjectID = "ijk-EB-dga"; */ +"ijk-EB-dga.title" = "على السطر"; + +/* Class = "NSWindow"; title = "ONLYOFFICE"; ObjectID = "IQv-IB-iLA"; */ +"IQv-IB-iLA.title" = "أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Justify"; ObjectID = "J5U-5w-g23"; */ +"J5U-5w-g23.title" = "ضبط النص"; + +/* Class = "NSMenuItem"; title = "Use None"; ObjectID = "J7y-lM-qPV"; */ +"J7y-lM-qPV.title" = "استخدم لا شيء"; + +/* Class = "NSMenuItem"; title = "Kern"; ObjectID = "jBQ-r6-VK2"; */ +"jBQ-r6-VK2.title" = "المسافة بين الأحرف"; + +/* Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "jFq-tB-4Kx"; */ +"jFq-tB-4Kx.title" = "\tمن اليمين إلى اليسار"; + +/* Class = "NSMenuItem"; title = "Format"; ObjectID = "jxT-CU-nIS"; */ +"jxT-CU-nIS.title" = "تنسيق"; + +/* Class = "NSMenuItem"; title = "Revert to Saved"; ObjectID = "KaW-ft-85H"; */ +"KaW-ft-85H.title" = "الرجوع إلى ما تم حفظه"; + +/* Class = "NSTabViewItem"; label = "ONLYOFFICE"; ObjectID = "kcg-El-49G"; */ +"kcg-El-49G.label" = "أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "Kd2-mp-pUS"; */ +"Kd2-mp-pUS.title" = "إظهار الكل"; + +/* Class = "NSMenuItem"; title = "\tLeft to Right"; ObjectID = "Lbh-J2-qVU"; */ +"Lbh-J2-qVU.title" = "\tمن اليسار إلى اليمين"; + +/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "LE2-aR-0XJ"; */ +"LE2-aR-0XJ.title" = "عرض الكل إلى الأمام"; + +/* Class = "NSMenuItem"; title = "Paste Ruler"; ObjectID = "LVM-kO-fVI"; */ +"LVM-kO-fVI.title" = "لصق المسطرة"; + +/* Class = "NSButtonCell"; title = "Cancel"; ObjectID = "m0C-e9-0oc"; */ +"m0C-e9-0oc.title" = "إلغاء"; + +/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "mK6-2p-4JG"; */ +"mK6-2p-4JG.title" = "التحقق من الإملاء"; + +/* Class = "NSMenuItem"; title = "Copy Ruler"; ObjectID = "MkV-Pr-PK5"; */ +"MkV-Pr-PK5.title" = "نسخ المسطرة"; + +/* Class = "NSMenuItem"; title = "Services"; ObjectID = "NMo-om-nkz"; */ +"NMo-om-nkz.title" = "خدمات"; + +/* Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "Nop-cj-93Q"; */ +"Nop-cj-93Q.title" = "\tافتراضي"; + +/* Class = "NSMenuItem"; title = "Ligatures"; ObjectID = "o6e-r0-MWq"; */ +"o6e-r0-MWq.title" = "الوصلات الكتابية"; + +/* Class = "NSMenuItem"; title = "Baseline"; ObjectID = "OaQ-X3-Vso"; */ +"OaQ-X3-Vso.title" = "على السطر"; + +/* Class = "NSMenu"; title = "Open Recent"; ObjectID = "oas-Oc-fiZ"; */ +"oas-Oc-fiZ.title" = "فتح المستجدّات"; + +/* Class = "NSMenuItem"; title = "Loosen"; ObjectID = "ogc-rX-tC1"; */ +"ogc-rX-tC1.title" = "توسيع"; + +/* Class = "NSMenuItem"; title = "Hide ONLYOFFICE"; ObjectID = "Olw-nP-bQN"; */ +"Olw-nP-bQN.title" = "إخفاء أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "OwM-mh-QMV"; */ +"OwM-mh-QMV.title" = "بحث للسابق"; + +/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "OY7-WF-poV"; */ +"OY7-WF-poV.title" = "تصغير"; + +/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "Oyz-dy-DGm"; */ +"Oyz-dy-DGm.title" = "أوقف التحدُّث"; + +/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "pa3-QI-u2k"; */ +"pa3-QI-u2k.title" = "حذف"; + +/* Class = "NSMenuItem"; title = "Bigger"; ObjectID = "Ptp-SP-VEL"; */ +"Ptp-SP-VEL.title" = "أكبر"; + +/* Class = "NSMenuItem"; title = "Save"; ObjectID = "pxx-59-PXV"; */ +"pxx-59-PXV.title" = "حفظ"; + +/* Class = "NSMenuItem"; title = "Show Fonts"; ObjectID = "Q5e-8K-NDq"; */ +"Q5e-8K-NDq.title" = "إظهار الخطوط"; + +/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "q09-fT-Sye"; */ +"q09-fT-Sye.title" = "بحث للتالي"; + +/* Class = "NSMenuItem"; title = "Page Setup…"; ObjectID = "qIS-W8-SiK"; */ +"qIS-W8-SiK.title" = "تهيئة الصفحة..."; + +/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "R4o-n2-Eq4"; */ +"R4o-n2-Eq4.title" = "تكبير"; + +/* Class = "NSMenuItem"; title = "\tRight to Left"; ObjectID = "RB4-Sm-HuC"; */ +"RB4-Sm-HuC.title" = "\tمن اليمين إلى اليسار"; + +/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "rbD-Rh-wIN"; */ +"rbD-Rh-wIN.title" = "التحقق من الإملاء أثناء الكتابة"; + +/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "rgM-f4-ycn"; */ +"rgM-f4-ycn.title" = "الشرطات الذكية"; + +/* Class = "NSButtonCell"; title = "Close"; ObjectID = "Riu-oE-8dj"; */ +"Riu-oE-8dj.title" = "إغلاق"; + +/* Class = "NSTextFieldCell"; title = "none"; ObjectID = "Rkd-xb-FRJ"; */ +"Rkd-xb-FRJ.title" = "لا شيء"; + +/* Class = "NSButtonCell"; title = "Logout"; ObjectID = "RmO-tv-UKh"; */ +"RmO-tv-UKh.title" = "تسجيل الخروج"; + +/* Class = "NSMenuItem"; title = "Superscript"; ObjectID = "Rqc-34-cIF"; */ +"Rqc-34-cIF.title" = "فوق السطر"; + +/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "Ruw-6m-B2m"; */ +"Ruw-6m-B2m.title" = "اختيار الكل"; + +/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "S0p-oC-mLd"; */ +"S0p-oC-mLd.title" = "القفز إلى المكان المختار"; + +/* Class = "NSTextFieldCell"; title = "Copyright info"; ObjectID = "sGd-zc-V0B"; */ +"sGd-zc-V0B.title" = "حول حقوق التأليف والنشر"; + +/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "snW-S8-Cw5"; */ +"snW-S8-Cw5.title" = "إظهار شريط الأدوات"; + +/* Class = "NSMenu"; title = "Window"; ObjectID = "Td7-aD-5lo"; */ +"Td7-aD-5lo.title" = "نافذة"; + +/* Class = "NSMenuItem"; title = "Document"; ObjectID = "TEm-B8-gsH"; */ +"TEm-B8-gsH.title" = "مستند"; + +/* Class = "NSMenu"; title = "Kern"; ObjectID = "tlD-Oa-oAM"; */ +"tlD-Oa-oAM.title" = "المسافة بين الأحرف"; + +/* Class = "NSMenuItem"; title = "Data Detectors"; ObjectID = "tRr-pd-1PS"; */ +"tRr-pd-1PS.title" = "مكتشف البيانات"; + +/* Class = "NSMenuItem"; title = "Open Recent"; ObjectID = "tXI-mr-wws"; */ +"tXI-mr-wws.title" = "فتح المستجدّات"; + +/* Class = "NSMenuItem"; title = "Check for Updates…"; ObjectID = "ud7-wC-A79"; */ +"ud7-wC-A79.title" = "التحقق من التحديثات..."; + +/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "UEZ-Bs-lqG"; */ +"UEZ-Bs-lqG.title" = "تكبير الحروف الإنجليزية الأولى من كل كلمة"; + +/* Class = "NSMenu"; title = "ONLYOFFICE"; ObjectID = "uQy-DD-JDr"; */ +"uQy-DD-JDr.title" = "أونلي أوفيس"; + +/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "uRl-iY-unG"; */ +"uRl-iY-unG.title" = "قص"; + +/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "Vdr-fp-XzO"; */ +"Vdr-fp-XzO.title" = "إخفاء آخَر"; + +/* Class = "NSMenuItem"; title = "Center"; ObjectID = "VIY-Ag-zcb"; */ +"VIY-Ag-zcb.title" = "توسيط"; + +/* Class = "NSMenuItem"; title = "Italic"; ObjectID = "Vjx-xi-njq"; */ +"Vjx-xi-njq.title" = "مائل"; + +/* Class = "NSMenuItem"; title = "Paste Style"; ObjectID = "vKC-jM-MkH"; */ +"vKC-jM-MkH.title" = "لصق التنسيق"; + +/* Class = "NSMenuItem"; title = "Show Ruler"; ObjectID = "vLm-3I-IUL"; */ +"vLm-3I-IUL.title" = "إظهار المسطرة"; + +/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "vmV-6d-7jI"; */ +"vmV-6d-7jI.title" = "تكبير الأحرف الإنجليزية"; + +/* Class = "NSMenuItem"; title = "Clear Menu"; ObjectID = "vNY-rz-j42"; */ +"vNY-rz-j42.title" = "إخلاء القائمة"; + +/* Class = "NSMenu"; title = "Ligatures"; ObjectID = "w0m-vy-SC9"; */ +"w0m-vy-SC9.title" = "الوصلات الكتابية"; + +/* Class = "NSMenu"; title = "Edit"; ObjectID = "W48-6f-4Dl"; */ +"W48-6f-4Dl.title" = "تعديل"; + +/* Class = "NSMenuItem"; title = "Align Right"; ObjectID = "wb2-vD-lq4"; */ +"wb2-vD-lq4.title" = "محاذاة لليمين"; + +/* Class = "NSMenuItem"; title = "Paste and Match Style"; ObjectID = "WeT-3V-zwk"; */ +"WeT-3V-zwk.title" = "لصق ومطابقة التنسيق"; + +/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "wpe-8d-5DV"; */ +"wpe-8d-5DV.title" = "خلية نص"; + +/* Class = "NSMenuItem"; title = "Help"; ObjectID = "wpr-3q-Mcd"; */ +"wpr-3q-Mcd.title" = "مساعدة"; + +/* Class = "NSMenuItem"; title = "Underline"; ObjectID = "WRG-CD-K1S"; */ +"WRG-CD-K1S.title" = "تسطير"; + +/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "x3v-GG-iWU"; */ +"x3v-GG-iWU.title" = "نسخ"; + +/* Class = "NSTextFieldCell"; title = "Product"; ObjectID = "xCO-ey-2lo"; */ +"xCO-ey-2lo.title" = "منتج"; + +/* Class = "NSMenuItem"; title = "Use All"; ObjectID = "xQD-1f-W4t"; */ +"xQD-1f-W4t.title" = "استخدم الكل"; + +/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "xrE-MZ-jX0"; */ +"xrE-MZ-jX0.title" = "تحدُّث"; + +/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "Xz5-n4-O0W"; */ +"Xz5-n4-O0W.title" = "بحث..."; + +/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "YEy-JH-Tfz"; */ +"YEy-JH-Tfz.title" = "بحث واستبدال..."; + +/* Class = "NSMenuItem"; title = "\tDefault"; ObjectID = "YGs-j5-SAR"; */ +"YGs-j5-SAR.title" = "\tافتراضي"; + +/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "Ynk-f8-cLZ"; */ +"Ynk-f8-cLZ.title" = "ابدأ التحدُّث"; + +/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "z6F-FW-3nz"; */ +"z6F-FW-3nz.title" = "إظهار البدائل"; + +/* Class = "NSTextFieldCell"; title = "Version"; ObjectID = "ZbA-hc-8PE"; */ +"ZbA-hc-8PE.title" = "نسخة"; + +/* Class = "NSMenuItem"; title = "Align Left"; ObjectID = "ZM1-6Q-yy1"; */ +"ZM1-6Q-yy1.title" = "محاذاة لليسار"; + +/* Class = "NSTextFieldCell"; title = "Email:"; ObjectID = "Zsi-3o-ASl"; */ +"Zsi-3o-ASl.title" = "البريد الإلكتروني:"; + +/* Class = "NSMenuItem"; title = "Paragraph"; ObjectID = "ZvO-Gk-QUH"; */ +"ZvO-Gk-QUH.title" = "قطعة"; + +/* Class = "NSTextFieldCell"; title = "Portal:"; ObjectID = "zwS-9G-S0N"; */ +"zwS-9G-S0N.title" = "البوابة السحابية:"; + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/MoveApplication.strings b/macos/ONLYOFFICE/ar-SA.lproj/MoveApplication.strings new file mode 100644 index 000000000..fb906767d --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/MoveApplication.strings @@ -0,0 +1,24 @@ +/* No comment provided by engineer. */ +"Could not move to Applications folder" = "غير قادر على النقل إلى مجلد التطبيقات"; + +/* No comment provided by engineer. */ +"Do Not Move" = "لا تحرّك"; + +/* No comment provided by engineer. */ +"I can move myself to the Applications folder if you'd like." = "أستطيع نقل نفسي إلى ملف التطبيقات إذا أردت."; + +/* No comment provided by engineer. */ +"Move to Applications Folder" = "نقل إلى مجلد التطبيقات"; + +/* No comment provided by engineer. */ +"Move to Applications folder in your Home folder?" = "نقل إلى مجلد التطبيقات داخل مجلد المنزل؟"; + +/* No comment provided by engineer. */ +"Move to Applications folder?" = "نقل إلى مجلد التطبيقات؟"; + +/* No comment provided by engineer. */ +"Note that this will require an administrator password." = "لاحظ أن هذه العملية تتطلب كلمة مرور المسؤول"; + +/* No comment provided by engineer. */ +"This will keep your Downloads folder uncluttered." = "هذا سيبقي ملف التحميلات مرتبًا"; + diff --git a/macos/ONLYOFFICE/ar-SA.lproj/Presentation-Reporter.strings b/macos/ONLYOFFICE/ar-SA.lproj/Presentation-Reporter.strings new file mode 100644 index 000000000..d6db32615 --- /dev/null +++ b/macos/ONLYOFFICE/ar-SA.lproj/Presentation-Reporter.strings @@ -0,0 +1,3 @@ +/* Class = "NSWindow"; title = "Reporter Window"; ObjectID = "Ygx-5K-Hn8"; */ +"Ygx-5K-Hn8.title" = "نافذة الإبلاغ"; + From 1e38314f4b97c5fed3f85871d9df27dea4568584 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Tue, 12 Dec 2023 14:04:38 +0300 Subject: [PATCH 04/16] added translations --- .../extras/update-daemon/res/langs/langs.iss | 236 +++++++++++++++++- 1 file changed, 235 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index 2f1b72162..5e56cc16c 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -7,6 +7,19 @@ es.CAPTION_TEXT =Servicio de actualización de ONLYOFFICE fr.CAPTION_TEXT =Service de mise à jour ONLYOFFICE it.CAPTION_TEXT =Servizio di aggiornamento ONLYOFFICE pt_BR.CAPTION_TEXT =Serviço de atualização ONLYOFFICE +zh_CN.CAPTION_TEXT =ONLYOFFICE 更新服务 +bg.CAPTION_TEXT =ONLYOFFICE Услуга за Актуализации +cs.CAPTION_TEXT =Aktualizační služba ONLYOFFICE +el.CAPTION_TEXT =Υπηρεσία ενημέρωσης ONLYOFFICE +hy.CAPTION_TEXT =ONLYOFFICE-ի թարմացման ծառայություն +ko.CAPTION_TEXT =ONLYOFFICE 업데이트 서비스 +lv.CAPTION_TEXT =ONLYOFFICE atjaunināšanas pakalpojums +nl.CAPTION_TEXT =ONLYOFFICE Update Service +pl.CAPTION_TEXT =Usługa aktualizacji ONLYOFFICE +pt_PT.CAPTION_TEXT =Serviço de atualização ONLYOFFICE +sl.CAPTION_TEXT =Storitev posodabljanja ONLYOFFICE +tr.CAPTION_TEXT =ONLYOFFICE Güncelleme Hizmeti +uk.CAPTION_TEXT =Служба оновлень ONLYOFFICE en.MESSAGE_TEXT_ERR1 =An error occurred: ru.MESSAGE_TEXT_ERR1 =Произошла ошибка: @@ -16,6 +29,19 @@ es.MESSAGE_TEXT_ERR1 =Se ha producido un error: fr.MESSAGE_TEXT_ERR1 =Une erreur s'est produite : it.MESSAGE_TEXT_ERR1 =Si è verificato un errore: pt_BR.MESSAGE_TEXT_ERR1 =Um erro ocorreu: +zh_CN.MESSAGE_TEXT_ERR1 =发生错误: +bg.MESSAGE_TEXT_ERR1 =Възникна грешка: +cs.MESSAGE_TEXT_ERR1 =Došlo k chybě: +el.MESSAGE_TEXT_ERR1 =Εμφανίστηκε σφάλμα: +hy.MESSAGE_TEXT_ERR1 =Սխալ է տեղի ունեցել․ +ko.MESSAGE_TEXT_ERR1 =오류가 발생했습니다: +lv.MESSAGE_TEXT_ERR1 =Radās kļūda: +nl.MESSAGE_TEXT_ERR1 =Er is een fout opgetreden: +pl.MESSAGE_TEXT_ERR1 =Wystąpił błąd: +pt_PT.MESSAGE_TEXT_ERR1 =Um erro ocorreu: +sl.MESSAGE_TEXT_ERR1 =Pojavila se je napaka: +tr.MESSAGE_TEXT_ERR1 =Bir hata oluştu: +uk.MESSAGE_TEXT_ERR1 =Сталася помилка: en.MESSAGE_TEXT_ERR2 =An error occurred while deleting: ru.MESSAGE_TEXT_ERR2 =Произошла ошибка при удалении: @@ -25,6 +51,19 @@ es.MESSAGE_TEXT_ERR2 =Se ha producido un error al eliminar: fr.MESSAGE_TEXT_ERR2 =Une erreur s'est produite lors de la suppression : it.MESSAGE_TEXT_ERR2 =Si è verificato un errore durante l'eliminazione: pt_BR.MESSAGE_TEXT_ERR2 =Ocorreu um erro ao excluir: +zh_CN.MESSAGE_TEXT_ERR2 =删除时出错: +bg.MESSAGE_TEXT_ERR2 =Възникна грешка при изтриването: +cs.MESSAGE_TEXT_ERR2 =Při mazání došlo k chybě: +el.MESSAGE_TEXT_ERR2 =Προέκυψε σφάλμα κατά τη διαγραφή: +hy.MESSAGE_TEXT_ERR2 =Ջնջելիս սխալ է տեղի ունեցել՝ +ko.MESSAGE_TEXT_ERR2 =삭제하는 동안 오류가 발생했습니다: +lv.MESSAGE_TEXT_ERR2 =Dzēšot, radās kļūda: +nl.MESSAGE_TEXT_ERR2 =Er is een fout opgetreden tijdens het verwijderen: +pl.MESSAGE_TEXT_ERR2 =Wystąpił błąd podczas usuwania: +pt_PT.MESSAGE_TEXT_ERR2 =Ocorreu um erro ao excluir: +sl.MESSAGE_TEXT_ERR2 =Pojavila se je napaka med brisanjem: +tr.MESSAGE_TEXT_ERR2 =Silinirken bir hata oluştu: +uk.MESSAGE_TEXT_ERR2 =Сталася помилка під час видалення: en.MESSAGE_TEXT_ERR3 =An error occurred while creating: ru.MESSAGE_TEXT_ERR3 =Произошла ошибка при создании: @@ -34,6 +73,19 @@ es.MESSAGE_TEXT_ERR3 =Se ha producido un error al crear: fr.MESSAGE_TEXT_ERR3 =Une erreur s'est produite lors de la création : it.MESSAGE_TEXT_ERR3 =Si è verificato un errore durante la creazione: pt_BR.MESSAGE_TEXT_ERR3 =Ocorreu um erro ao criar: +zh_CN.MESSAGE_TEXT_ERR3 =创建时出错: +bg.MESSAGE_TEXT_ERR3 =Възникна грешка при създаването: +cs.MESSAGE_TEXT_ERR3 =Při vytváření došlo k chybě: +el.MESSAGE_TEXT_ERR3 =Εμφανίστηκε σφάλμα κατά τη δημιουργία: +hy.MESSAGE_TEXT_ERR3 =Սխալ է տեղի ունեցել ստեղծելիս՝ +ko.MESSAGE_TEXT_ERR3 =생성하는 동안 오류가 발생했습니다: +lv.MESSAGE_TEXT_ERR3 =Radās kļūda, veidojot: +nl.MESSAGE_TEXT_ERR3 =Er is een fout opgetreden tijdens het aanmaken: +pl.MESSAGE_TEXT_ERR3 =Wystąpił błąd podczas tworzenia: +pt_PT.MESSAGE_TEXT_ERR3 =Ocorreu um erro ao criar: +sl.MESSAGE_TEXT_ERR3 =Pojavila se je napaka md ustvarjanjem: +tr.MESSAGE_TEXT_ERR3 =Oluşturulurken bir hata oluştu: +uk.MESSAGE_TEXT_ERR3 =Сталася помилка під час створення: en.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! ru.MESSAGE_TEXT_ERR4 =Произошла ошибка при перезапуске сервиса! @@ -43,6 +95,19 @@ es.MESSAGE_TEXT_ERR4 =¡Se ha producido un error al reiniciar el servicio! fr.MESSAGE_TEXT_ERR4 =Une erreur s'est produite lors du redémarrage du service ! it.MESSAGE_TEXT_ERR4 =Si è verificato un errore durante il riavvio del servizio! pt_BR.MESSAGE_TEXT_ERR4 =Ocorreu um erro ao reiniciar o serviço! +zh_CN.MESSAGE_TEXT_ERR4 =重新启动服务时出错! +bg.MESSAGE_TEXT_ERR4 =Възникна грешка при рестартирането на услугата! +cs.MESSAGE_TEXT_ERR4 =Při restartování služby došlo k chybě! +el.MESSAGE_TEXT_ERR4 =Εμφανίστηκε σφάλμα κατά την επανεκκίνηση της υπηρεσίας! +hy.MESSAGE_TEXT_ERR4 =Սխալ է տեղի ունեցել ծառայությունը վերագործարկելիս․ +ko.MESSAGE_TEXT_ERR4 =서비스를 다시 시작하는 동안 오류가 발생했습니다! +lv.MESSAGE_TEXT_ERR4 =Restartējot pakalpojumu, radās kļūda! +nl.MESSAGE_TEXT_ERR4 =Er is een fout opgetreden tijdens het opnieuw opstarten van de service! +pl.MESSAGE_TEXT_ERR4 =Wystąpił błąd podczas ponownego uruchamiania usługi! +pt_PT.MESSAGE_TEXT_ERR4 =Ocorreu um erro ao reiniciar o serviço! +sl.MESSAGE_TEXT_ERR4 =Med ponovnim zagonom storitve je prišlo do napake! +tr.MESSAGE_TEXT_ERR4 =Hizmet yeniden başlatılırken bir hata oluştu! +uk.MESSAGE_TEXT_ERR4 =Сталася помилка під час перезапуску служби! en.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: ru.MESSAGE_TEXT_ERR5 =Обновление отменено. Не удалось найти папку: @@ -52,6 +117,19 @@ es.MESSAGE_TEXT_ERR5 =Actualización cancelada. No se puede encontrar la carpeta fr.MESSAGE_TEXT_ERR5 =Mise à jour annulée. Impossible de trouver le dossier : it.MESSAGE_TEXT_ERR5 =Aggiornamento annullato. Impossibile trovare la cartella: pt_BR.MESSAGE_TEXT_ERR5 =Atualização cancelada. Não foi possível encontrar a pasta: +zh_CN.MESSAGE_TEXT_ERR5 =更新已取消。找不到文件夹: +bg.MESSAGE_TEXT_ERR5 =Актуализацията е отменена. Не откриваме папка: +cs.MESSAGE_TEXT_ERR5 =Aktualizace byla zrušena. Nelze najít složku: +el.MESSAGE_TEXT_ERR5 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να βρεθεί ο φάκελος: +hy.MESSAGE_TEXT_ERR5 =Թարմացումը չեղարկվել է: Թղթապանակը չի գտնվել՝ +ko.MESSAGE_TEXT_ERR5 =업데이트가 취소되었습니다. 폴더를 찾을 수 없습니다: +lv.MESSAGE_TEXT_ERR5 =Atjaunināšana ir atcelta. Nevar atrast mapi: +nl.MESSAGE_TEXT_ERR5 =Update geannuleerd. Kan map niet vinden: +pl.MESSAGE_TEXT_ERR5 =Aktualizacja została anulowana. Nie można znaleźć katalogu: +pt_PT.MESSAGE_TEXT_ERR5 =Atualização cancelada. Não foi possível encontrar a pasta: +sl.MESSAGE_TEXT_ERR5 =Posodobitev preklicana. Ne najdem mape: +tr.MESSAGE_TEXT_ERR5 =Güncelleme iptal edildi. Klasör bulunamıyor: +uk.MESSAGE_TEXT_ERR5 =Оновлення скасовано. Не вдається знайти папку: en.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: ru.MESSAGE_TEXT_ERR6 =Обновление отменено. Отсутствует подпись файла: @@ -61,6 +139,19 @@ es.MESSAGE_TEXT_ERR6 =Actualización cancelada. No hay firma del archivo: fr.MESSAGE_TEXT_ERR6 =Mise à jour annulée. La signature du fichier est manquante : it.MESSAGE_TEXT_ERR6 =Aggiornamento annullato. Manca la firma del file: pt_BR.MESSAGE_TEXT_ERR6 =Atualização cancelada. A assinatura do arquivo está faltando: +zh_CN.MESSAGE_TEXT_ERR6 =更新已取消。 文件签名丢失: +bg.MESSAGE_TEXT_ERR6 =Актуализацията е отменена. Подписът на файла липсва: +cs.MESSAGE_TEXT_ERR6 =Aktualizace zrušena. Chybí podpis souboru: +el.MESSAGE_TEXT_ERR6 =Η ενημέρωση ακυρώθηκε. Λείπει η υπογραφή του αρχείου: +hy.MESSAGE_TEXT_ERR6 =Թարմացումը չեղարկվել է: Ֆայլի ստորագրությունը բացակայում է․ +ko.MESSAGE_TEXT_ERR6 =업데이트가 취소되었습니다. 파일 서명이 누락되었습니다: +lv.MESSAGE_TEXT_ERR6 =Atjaunināšana ir atcelta. Trūkst faila paraksta: +nl.MESSAGE_TEXT_ERR6 =Update geannuleerd. De bestandsondertekening ontbreekt: +pl.MESSAGE_TEXT_ERR6 =Aktualizacja została anulowana. Brak podpisu pliku: +pt_PT.MESSAGE_TEXT_ERR6 =Atualização cancelada. A assinatura do arquivo está faltando: +sl.MESSAGE_TEXT_ERR6 =Posodobitev preklicana. Manjka podpis datoteke: +tr.MESSAGE_TEXT_ERR6 =Güncelleme iptal edildi. Dosya imzası eksik: +uk.MESSAGE_TEXT_ERR6 =Оновлення скасовано. Відсутній підпис файлу: en.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: ru.MESSAGE_TEXT_ERR7 =Обновление отменено. Не удалось удалить папку: @@ -70,6 +161,19 @@ es.MESSAGE_TEXT_ERR7 =Actualización cancelada. No se puede eliminar la carpeta: fr.MESSAGE_TEXT_ERR7 =Mise à jour annulée. Impossible de supprimer le dossier : it.MESSAGE_TEXT_ERR7 =Aggiornamento annullato. Impossibile eliminare la cartella: pt_BR.MESSAGE_TEXT_ERR7 =Atualização cancelada. Não é possível excluir a pasta: +zh_CN.MESSAGE_TEXT_ERR7 =更新已取消。 无法删除文件夹: +bg.MESSAGE_TEXT_ERR7 =Актуализацията е отменена. Папката не може да се изтрие: +cs.MESSAGE_TEXT_ERR7 =Aktualizace zrušena. Nelze smazat složku: +el.MESSAGE_TEXT_ERR7 =Η ενημέρωση ακυρώθηκε. Δεν είναι δυνατή η διαγραφή φακέλου: +hy.MESSAGE_TEXT_ERR7 =Թարմացումը չեղարկվել է: Հնարավոր չէ ջնջել պանակը՝ +ko.MESSAGE_TEXT_ERR7 =업데이트가 취소되었습니다. 폴더를 삭제할 수 없습니다: +lv.MESSAGE_TEXT_ERR7 =Atjaunināšana ir atcelta. Nevar izdzēst mapi: +nl.MESSAGE_TEXT_ERR7 =Update geannuleerd. Kan map niet verwijderen: +pl.MESSAGE_TEXT_ERR7 =Aktualizacja została anulowana. Nie można usunąć katalogu: +pt_PT.MESSAGE_TEXT_ERR7 =Atualização cancelada. Não é possível excluir a pasta: +sl.MESSAGE_TEXT_ERR7 =Posodobitev preklicana. Mape ni mogoče izbrisati: +tr.MESSAGE_TEXT_ERR7 =Güncelleme iptal edildi. Klasör silinemiyor: +uk.MESSAGE_TEXT_ERR7 =Оновлення скасовано. Не вдається видалити папку: en.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: ru.MESSAGE_TEXT_ERR8 =Обновление отменено. Приложение не закрыто: @@ -79,6 +183,19 @@ es.MESSAGE_TEXT_ERR8 =Actualización cancelada. El programa no está cerrado: fr.MESSAGE_TEXT_ERR8 =Mise à jour annulée. L'application n'est pas fermée : it.MESSAGE_TEXT_ERR8 =Aggiornamento annullato. Il programma non è chiuso: pt_BR.MESSAGE_TEXT_ERR8 =Atualização cancelada. O programa não está fechado: +zh_CN.MESSAGE_TEXT_ERR8 =更新已取消。 程序未关闭: +bg.MESSAGE_TEXT_ERR8 =Актуализацията е отменена. Програмата не е затворена: +cs.MESSAGE_TEXT_ERR8 =Aktualizace zrušena. Program není uzavřen: +el.MESSAGE_TEXT_ERR8 =Η ενημέρωση ακυρώθηκε. Το πρόγραμμα δεν έχει κλείσει: +hy.MESSAGE_TEXT_ERR8 =Թարմացումը չեղարկվել է: Ծրագիրը փակված չէ։ +ko.MESSAGE_TEXT_ERR8 =업데이트가 취소되었습니다. 프로그램이 종료되지 않았습니다: +lv.MESSAGE_TEXT_ERR8 =Atjaunināšana ir atcelta. Programma nav aizvērta: +nl.MESSAGE_TEXT_ERR8 =Update geannuleerd. Het programma is niet afgesloten: +pl.MESSAGE_TEXT_ERR8 =Aktualizacja została anulowana. Program nie jest zamknięty: +pt_PT.MESSAGE_TEXT_ERR8 =Atualização cancelada. O programa não está fechado: +sl.MESSAGE_TEXT_ERR8 =Posodobitev preklicana. Program ni zaprt: +tr.MESSAGE_TEXT_ERR8 =Güncelleme iptal edildi. Program kapalı değil: +uk.MESSAGE_TEXT_ERR8 =Оновлення скасовано. Програма не закрита: en.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: ru.MESSAGE_TEXT_ERR9 =Обновление отменено. Не удалось создать папку: @@ -88,6 +205,19 @@ es.MESSAGE_TEXT_ERR9 =Actualización cancelada. No se puede crear la carpeta: fr.MESSAGE_TEXT_ERR9 =Mise à jour annulée. Impossible de créer un dossier : it.MESSAGE_TEXT_ERR9 =Aggiornamento annullato. Impossibile creare la cartella: pt_BR.MESSAGE_TEXT_ERR9 =Atualização cancelada. Não é possível criar a pasta: +zh_CN.MESSAGE_TEXT_ERR9 =更新已取消。 无法创建文件夹: +bg.MESSAGE_TEXT_ERR9 =Актуализацията е отменена. Папката не може да се създаде: +cs.MESSAGE_TEXT_ERR9 =Aktualizace zrušena. Nelze vytvořit složku: +el.MESSAGE_TEXT_ERR9 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να δημιουργηθεί φάκελος: +hy.MESSAGE_TEXT_ERR9 =Թարմացումը չեղարկվել է: Թղթապանակ ստեղծել հնարավոր չէ՝ +ko.MESSAGE_TEXT_ERR9 =업데이트가 취소되었습니다. 폴더를 생성할 수 없습니다: +lv.MESSAGE_TEXT_ERR9 =Atjaunināšana ir atcelta. Nevar izveidot mapi: +nl.MESSAGE_TEXT_ERR9 =Update geannuleerd. Kan map niet aanmaken: +pl.MESSAGE_TEXT_ERR9 =Aktualizacja została anulowana. Nie można utworzyć katalogu: +pt_PT.MESSAGE_TEXT_ERR9 =Atualização cancelada. Não é possível criar a pasta: +sl.MESSAGE_TEXT_ERR9 =Posodobitev preklicana. Mape ni mogoče ustvariti: +tr.MESSAGE_TEXT_ERR9 =Güncelleme iptal edildi. Klasör oluşturulamıyor: +uk.MESSAGE_TEXT_ERR9 =Оновлення скасовано. Не вдається створити папку: en.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: ru.MESSAGE_TEXT_ERR10 =Обновление отменено. Не удалось переместить файлы в резервную копию: @@ -97,6 +227,19 @@ es.MESSAGE_TEXT_ERR10 =Actualización cancelada. No se pueden reemplazar los arc fr.MESSAGE_TEXT_ERR10 =Mise à jour annulée. Impossible de remplacer les fichiers par des fichiers de sauvegarde : it.MESSAGE_TEXT_ERR10 =Aggiornamento annullato. Impossibile spostare i file nel backup: pt_BR.MESSAGE_TEXT_ERR10 =Atualização cancelada. Não é possível substituir arquivos para backup: +zh_CN.MESSAGE_TEXT_ERR10 =更新已取消。 无法替换要备份的文件: +bg.MESSAGE_TEXT_ERR10 =Актуализацията е отменена. Не могат да се заменят файловете за архивиране: +cs.MESSAGE_TEXT_ERR10 =Aktualizace zrušena. Nelze nahradit soubory do zálohy: +el.MESSAGE_TEXT_ERR10 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να αντικαταστήσει αρχεία για δημιουργία αντιγράφων ασφαλείας: +hy.MESSAGE_TEXT_ERR10 =Թարմացումը չեղարկվել է: Հնարավոր չէ փոխարինել ֆայլերը կրկնօրինակում՝ +ko.MESSAGE_TEXT_ERR10 =업데이트가 취소되었습니다. 백업할 파일을 교체할 수 없습니다: +lv.MESSAGE_TEXT_ERR10 =Atjaunināšana ir atcelta. Nevar aizstāt failus, lai dublētu: +nl.MESSAGE_TEXT_ERR10 =Update geannuleerd. Kan bestanden niet vervangen voor back-up: +pl.MESSAGE_TEXT_ERR10 =Aktualizacja została anulowana. Nie można zastąpić plików do utworzenia kopii zapasowej: +pt_PT.MESSAGE_TEXT_ERR10 =Atualização cancelada. Não é possível substituir arquivos para backup: +sl.MESSAGE_TEXT_ERR10 =Posodobitev preklicana. Datotek za varnostno kopiranje ni mogoče zamenjati: +tr.MESSAGE_TEXT_ERR10 =Güncelleme iptal edildi. Yedeklenecek dosyalar değiştirilemiyor: +uk.MESSAGE_TEXT_ERR10 =Оновлення скасовано. Не вдається замінити файли для резервної копії: en.MESSAGE_TEXT_ERR11 =Can't restore files from backup! ru.MESSAGE_TEXT_ERR11 =Не удалось восстановить файлы из резервной копии! @@ -106,6 +249,19 @@ es.MESSAGE_TEXT_ERR11 =¡No se pueden restaurar los archivos de la copia de segu fr.MESSAGE_TEXT_ERR11 =Impossible de restaurer des fichiers à partir d'une sauvegarde ! it.MESSAGE_TEXT_ERR11 =Impossibile ripristinare i file dal backup! pt_BR.MESSAGE_TEXT_ERR11 =Não é possível restaurar arquivos do backup! +zh_CN.MESSAGE_TEXT_ERR11 =无法从备份中恢复文件! +bg.MESSAGE_TEXT_ERR11 =Файловете от резервното копие не могат да се възстановят! +cs.MESSAGE_TEXT_ERR11 =Nelze obnovit soubory ze zálohy! +el.MESSAGE_TEXT_ERR11 =Δεν είναι δυνατή η επαναφορά αρχείων από το αντίγραφο ασφαλείας! +hy.MESSAGE_TEXT_ERR11 =Հնարավոր չէ վերականգնել ֆայլերը կրկնօրինակումից։ +ko.MESSAGE_TEXT_ERR11 =백업에서 파일을 복원할 수 없습니다! +lv.MESSAGE_TEXT_ERR11 =Nevar atjaunot failus no dublējuma! +nl.MESSAGE_TEXT_ERR11 =Kan bestanden niet herstellen vanuit back-up! +pl.MESSAGE_TEXT_ERR11 =Nie można przywrócić plików z kopii zapasowej! +pt_PT.MESSAGE_TEXT_ERR11 =Não é possível restaurar arquivos do backup! +sl.MESSAGE_TEXT_ERR11 =Datotek ni mogoče obnoviti iz varnostne kopije! +tr.MESSAGE_TEXT_ERR11 =Dosyalar yedeklemeden geri yüklenemiyor! +uk.MESSAGE_TEXT_ERR11 =Не вдається відновити файли з резервної копії! en.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: ru.MESSAGE_TEXT_ERR12 =Обновление отменено. Не удалось переместить обновления в папку приложения: @@ -115,6 +271,19 @@ es.MESSAGE_TEXT_ERR12 =Actualización cancelada. No se pueden mover las actualiz fr.MESSAGE_TEXT_ERR12 =Mise à jour annulée. Impossible de déplacer les mises à jour vers le chemin d'accès à l'application : it.MESSAGE_TEXT_ERR12 =Aggiornamento annullato. Impossibile spostare gli aggiornamenti nel percorso dell'app: pt_BR.MESSAGE_TEXT_ERR12 =Atualização cancelada. Não é possível mover as atualizações para o caminho do aplicativo: +zh_CN.MESSAGE_TEXT_ERR12 =更新已取消。 无法将更新文件移动到应用程序路径: +bg.MESSAGE_TEXT_ERR12 =Актуализацията е отменена. Не можете да местите актуализации към пътя на Приложението: +cs.MESSAGE_TEXT_ERR12 =Aktualizace zrušena. Nelze přesunout aktualizace do cesty k aplikaci: +el.MESSAGE_TEXT_ERR12 =Η ενημέρωση ακυρώθηκε. Δεν είναι δυνατή η μετακίνηση ενημερώσεων στη διαδρομή της εφαρμογής: +hy.MESSAGE_TEXT_ERR12 =Թարմացումը չեղարկվել է: Հնարավոր չէ թարմացումները տեղափոխել App(հավելված) path +ko.MESSAGE_TEXT_ERR12 =업데이트가 취소되었습니다. 업데이트를 앱 경로로 이동할 수 없습니다: +lv.MESSAGE_TEXT_ERR12 =Atjaunināšana ir atcelta. Nevar pārvietot atjauninājumus uz lietotnes ceļu: +nl.MESSAGE_TEXT_ERR12 =Update geannuleerd. Kan updates niet verplaatsen naar App path: +pl.MESSAGE_TEXT_ERR12 =Aktualizacja została anulowana. Nie można przenieść aktualizacji do ścieżki aplikacji: +pt_PT.MESSAGE_TEXT_ERR12 =Atualização cancelada. Não é possível mover as atualizações para o caminho do aplicativo: +sl.MESSAGE_TEXT_ERR12 =Posodobitev preklicana. Posodobitev ni mogoče premakniti na pot aplikacije: +tr.MESSAGE_TEXT_ERR12 =Güncelleme iptal edildi. Güncellemeler Uygulama yoluna taşınamıyor: +uk.MESSAGE_TEXT_ERR12 =Оновлення скасовано. Не вдається перемістити оновлення до шляху застосунку: en.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: ru.MESSAGE_TEXT_ERR13 =Произошла ошибка при удалении папки приложения: @@ -124,6 +293,19 @@ es.MESSAGE_TEXT_ERR13 =Se ha producido un error al eliminar la ruta de la aplica fr.MESSAGE_TEXT_ERR13 =Une erreur s'est produite lors de la suppression du chemin d'accès à l'application : it.MESSAGE_TEXT_ERR13 =Si è verificato un errore durante la rimozione del percorso dell'app: pt_BR.MESSAGE_TEXT_ERR13 =Ocorreu um erro ao remover o caminho do aplicativo: +zh_CN.MESSAGE_TEXT_ERR13 =删除应用程序路径时出错: +bg.MESSAGE_TEXT_ERR13 =Възникна грешка при премахване пътя на Приложението: +cs.MESSAGE_TEXT_ERR13 =Při odebírání cesty k aplikaci došlo k chybě: +el.MESSAGE_TEXT_ERR13 =Παρουσιάστηκε σφάλμα κατά την αφαίρεση της διαδρομής της εφαρμογής: +hy.MESSAGE_TEXT_ERR13 =App path-ը հեռացնելիս սխալ առաջացավ՝ +ko.MESSAGE_TEXT_ERR13 =앱 경로를 삭제하는 동안 오류가 발생했습니다: +lv.MESSAGE_TEXT_ERR13 =Noņemot lietotnes ceļu, radās kļūda: +nl.MESSAGE_TEXT_ERR13 =Er is een fout opgetreden tijdens het verwijderen van App path: +pl.MESSAGE_TEXT_ERR13 =Wystąpił błąd podczas usuwania ścieżki aplikacji: +pt_PT.MESSAGE_TEXT_ERR13 =Ocorreu um erro ao remover o caminho do aplicativo: +sl.MESSAGE_TEXT_ERR13 =Pri odstranjevanju poti aplikacije je prišlo do napake: +tr.MESSAGE_TEXT_ERR13 =Uygulama yolu kaldırılırken bir hata oluştu: +uk.MESSAGE_TEXT_ERR13 =Сталася помилка під час видалення шляху застосунку: en.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: ru.MESSAGE_TEXT_ERR14 =Произошла ошибка при восстановлении файлов из резервной копии: @@ -133,6 +315,19 @@ es.MESSAGE_TEXT_ERR14 =Se ha producido un error al restaurar los archivos de la fr.MESSAGE_TEXT_ERR14 =Une erreur s'est produite lors de la restauration des fichiers à partir de la sauvegarde : it.MESSAGE_TEXT_ERR14 =Si è verificato un errore durante il ripristino dei file dal backup: pt_BR.MESSAGE_TEXT_ERR14 =Ocorreu um erro ao restaurar arquivos do backup: +zh_CN.MESSAGE_TEXT_ERR14 =从备份恢复文件时出错: +bg.MESSAGE_TEXT_ERR14 =Възникна грешка при възстановяване на файлове от резервно копие: +cs.MESSAGE_TEXT_ERR14 =Při obnově souborů ze zálohy došlo k chybě: +el.MESSAGE_TEXT_ERR14 =Εμφανίστηκε σφάλμα κατά την επαναφορά αρχείων από αντίγραφο ασφαλείας: +hy.MESSAGE_TEXT_ERR14 =Սխալ է տեղի ունեցել ֆայլերը կրկնօրինակումից վերականգնելիս՝ +ko.MESSAGE_TEXT_ERR14 =백업에서 파일을 복원하는 동안 오류가 발생했습니다: +lv.MESSAGE_TEXT_ERR14 =Atjaunojot failus no dublējuma, radās kļūda: +nl.MESSAGE_TEXT_ERR14 =Er is een fout opgetreden tijdens het herstellen van bestanden vanaf een back-up: +pl.MESSAGE_TEXT_ERR14 =Wystąpił błąd podczas próby przywrócenia plików z kopii zapasowej: +pt_PT.MESSAGE_TEXT_ERR14 =Ocorreu um erro ao restaurar arquivos do backup: +sl.MESSAGE_TEXT_ERR14 =Med obnavljanjem datotek iz varnostne kopije je prišlo do napake: +tr.MESSAGE_TEXT_ERR14 =Yedeklemeden dosyalar geri yüklenirken bir hata oluştu: +uk.MESSAGE_TEXT_ERR14 =Сталася помилка під час відновлення файлів із резервної копії: en.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! ru.MESSAGE_TEXT_ERR15 =Произошла ошибка при перезапуске приложения! @@ -142,6 +337,19 @@ es.MESSAGE_TEXT_ERR15 =¡Se ha producido un error al reiniciar el programa! fr.MESSAGE_TEXT_ERR15 =Une erreur s'est produite lors du redémarrage de l'application ! it.MESSAGE_TEXT_ERR15 =Si è verificato un errore durante il riavvio del programma! pt_BR.MESSAGE_TEXT_ERR15 =Ocorreu um erro ao reiniciar o programa! +zh_CN.MESSAGE_TEXT_ERR15 =重新启动程序时出错! +bg.MESSAGE_TEXT_ERR15 =Възникна грешка при рестартиране на програмата! +cs.MESSAGE_TEXT_ERR15 =Při restartování programu došlo k chybě! +el.MESSAGE_TEXT_ERR15 =Εμφανίστηκε σφάλμα κατά την επανεκκίνηση του προγράμματος! +hy.MESSAGE_TEXT_ERR15 =Ծրագիրը վերագործարկելիս սխալ է տեղի ունեցել: +ko.MESSAGE_TEXT_ERR15 =프로그램을 다시 시작하는 동안 오류가 발생했습니다! +lv.MESSAGE_TEXT_ERR15 =Restartējot programmu, radās kļūda! +nl.MESSAGE_TEXT_ERR15 =Er is een fout opgetreden tijdens het opnieuw opstarten van het programma! +pl.MESSAGE_TEXT_ERR15 =Wystąpił błąd podczas ponownego uruchamiania programu! +pt_PT.MESSAGE_TEXT_ERR15 =Ocorreu um erro ao reiniciar o programa! +sl.MESSAGE_TEXT_ERR15 =Pri ponovnem zagonu programa je prišlo do napake! +tr.MESSAGE_TEXT_ERR15 =Program yeniden başlatılırken bir hata oluştu! +uk.MESSAGE_TEXT_ERR15 =Сталася помилка під час перезапуску програми! en.MESSAGE_TEXT_ERR16 =SDL init error: ru.MESSAGE_TEXT_ERR16 =Ошибка инициализации SDL: @@ -151,6 +359,19 @@ es.MESSAGE_TEXT_ERR16 =Error de inicio SDL: fr.MESSAGE_TEXT_ERR16 =Erreur d'initialisation SDL : it.MESSAGE_TEXT_ERR16 =Errore di inizializzazione SDL: pt_BR.MESSAGE_TEXT_ERR16 =Erro de inicialização SDL: +zh_CN.MESSAGE_TEXT_ERR16 =SDL 初始化错误: +bg.MESSAGE_TEXT_ERR16 =Грешка при стартиране на SDL: +cs.MESSAGE_TEXT_ERR16 =Chyba při inicializaci SDL: +el.MESSAGE_TEXT_ERR16 =Σφάλμα εκκίνησης SDL: +hy.MESSAGE_TEXT_ERR16 =SDL սկզբնական սխալ. +ko.MESSAGE_TEXT_ERR16 =SDL 초기화 오류: +lv.MESSAGE_TEXT_ERR16 =SDL init kļūda: +nl.MESSAGE_TEXT_ERR16 =SDL init fout: +pl.MESSAGE_TEXT_ERR16 =Błąd SDL init: +pt_PT.MESSAGE_TEXT_ERR16 =Erro de inicialização SDL: +sl.MESSAGE_TEXT_ERR16 =Napaka pri zagonu SDL: +tr.MESSAGE_TEXT_ERR16 =SDL başlatma hatası: +uk.MESSAGE_TEXT_ERR16 =Помилка запуску SDL: en.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: ru.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher вернул ошибку: @@ -159,4 +380,17 @@ de.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hat einen Fehler zurückgegeben: es.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha devuelto un error: fr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher a renvoyé une erreur : it.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher ha restituito un errore: -pt_BR.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: \ No newline at end of file +pt_BR.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: +zh_CN.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher 返回错误: +bg.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher върна грешка: +cs.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hlásí chybu: +el.MESSAGE_TEXT_ERR17 =Το ServiceCtrlDispatcher επέστρεψε σφάλμα: +hy.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher-ը վերադարձրեց սխալը. +ko.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher가 오류를 반환했습니다: +lv.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher atgrieza kļūdu: +nl.MESSAGE_TEXT_ERR17 =ONLYOFFICE Update Service +pl.MESSAGE_TEXT_ERR17 =Funkcja ServiceCtrlDispatcher odesłała błąd: +pt_PT.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: +sl.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher je vrnil napako: +tr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hata döndürdü: +uk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повернув помилку: \ No newline at end of file From 836a55cebd0cfe0d290396a7a3a094273eefc7e0 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 12 Dec 2023 14:11:03 +0200 Subject: [PATCH 05/16] [linux] add feature 63817: display of recent files --- .../cascapplicationmanagerwrapper_private.h | 2 -- win-linux/src/ceditortools.cpp | 2 -- win-linux/src/components/cdownloadwidget.cpp | 2 -- win-linux/src/platform_linux/gtkutils.cpp | 7 ++++++ win-linux/src/platform_linux/gtkutils.h | 1 + win-linux/src/utils.cpp | 22 +++++++++++++------ win-linux/src/utils.h | 2 +- win-linux/src/windows/cmainwindow.cpp | 2 -- 8 files changed, 24 insertions(+), 16 deletions(-) diff --git a/win-linux/src/cascapplicationmanagerwrapper_private.h b/win-linux/src/cascapplicationmanagerwrapper_private.h index 4bed14c7c..098643792 100644 --- a/win-linux/src/cascapplicationmanagerwrapper_private.h +++ b/win-linux/src/cascapplicationmanagerwrapper_private.h @@ -232,9 +232,7 @@ class CAscApplicationManagerWrapper_Private CMessage::error(m_appmanager.mainWindow()->handle(), QObject::tr("File %1 cannot be opened or doesn't exists.").arg(_info.fileName())); } -#ifdef _WIN32 else Utils::addToRecent(file_path); -#endif } } diff --git a/win-linux/src/ceditortools.cpp b/win-linux/src/ceditortools.cpp index 33b851d04..fa833b9a1 100644 --- a/win-linux/src/ceditortools.cpp +++ b/win-linux/src/ceditortools.cpp @@ -394,9 +394,7 @@ namespace CEditorTools AscAppManager::GetFileFormatByExtentionForSave(pSaveData->get_Path()); pSaveData->put_FileType(format > -1 ? format : 0); -#ifdef _WIN32 Utils::addToRecent(_full_path.toStdWString()); -#endif } } diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index d408cdea5..8a96dcde6 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -343,9 +343,7 @@ void CDownloadWidget::downloadProcess(void * info) CMessage::error(parentWidget(), tr("Can't open file: ") + path); } else { AscAppManager::handleInputCmd({path.toStdWString()}); -#ifdef _WIN32 Utils::addToRecent(path.toStdWString()); -#endif } }); diff --git a/win-linux/src/platform_linux/gtkutils.cpp b/win-linux/src/platform_linux/gtkutils.cpp index fb3836e14..e01d080b8 100644 --- a/win-linux/src/platform_linux/gtkutils.cpp +++ b/win-linux/src/platform_linux/gtkutils.cpp @@ -72,6 +72,13 @@ void set_parent(GtkWidget *dialog, gpointer data) } } +void add_to_recent(const gchar *uri) +{ + gtk_init(NULL, NULL); + GtkRecentManager *rm = gtk_recent_manager_get_default(); + gtk_recent_manager_add_item(rm, uri); +} + GtkWidget *find_widget_by_path(GtkWidget *parent, const gchar *widget_path) { if (!parent) diff --git a/win-linux/src/platform_linux/gtkutils.h b/win-linux/src/platform_linux/gtkutils.h index c6b1c9ac7..9b85b4da6 100644 --- a/win-linux/src/platform_linux/gtkutils.h +++ b/win-linux/src/platform_linux/gtkutils.h @@ -44,6 +44,7 @@ typedef struct DialogTag { gboolean set_focus(GtkWidget *dialog); gboolean focus_out(gpointer data); void set_parent(GtkWidget *dialog, gpointer data); +void add_to_recent(const gchar *uri); GtkWidget *find_widget_by_path(GtkWidget *parent, const gchar *widget_path); #endif // GTKUTILS_H diff --git a/win-linux/src/utils.cpp b/win-linux/src/utils.cpp index 5bacb475c..4bb4ca642 100644 --- a/win-linux/src/utils.cpp +++ b/win-linux/src/utils.cpp @@ -30,6 +30,9 @@ * */ +#ifdef __linux__ +# include "platform_linux/gtkutils.h" +#endif #include "utils.h" #include "defines.h" #include @@ -710,6 +713,18 @@ bool Utils::updatesAllowed() return false; } +void Utils::addToRecent(const std::wstring &path) +{ + QString _path = QString::fromStdWString(path); +#ifdef _WIN32 + QString appPath = qApp->applicationDirPath(); + QProcess::startDetached(appPath + "/" + QString(REG_APP_NAME), {"--add-to-recent", QDir::toNativeSeparators(_path)}, appPath); +#else + std::string uri = "file://" + _path.toStdString(); + add_to_recent(uri.c_str()); +#endif +} + #ifdef _WIN32 Utils::WinVer Utils::getWinVersion() { @@ -750,13 +765,6 @@ Utils::WinVer Utils::getWinVersion() return WinVer::Undef; } -void Utils::addToRecent(const std::wstring &path) -{ - QString _path = QString::fromStdWString(path); - QString appPath = qApp->applicationDirPath(); - QProcess::startDetached(appPath + "/" + QString(REG_APP_NAME), {"--add-to-recent", QDir::toNativeSeparators(_path)}, appPath); -} - std::atomic_bool sessionInProgress{true}; bool Utils::isSessionInProgress() diff --git a/win-linux/src/utils.h b/win-linux/src/utils.h index 14bd584b7..cb35ea1eb 100644 --- a/win-linux/src/utils.h +++ b/win-linux/src/utils.h @@ -118,13 +118,13 @@ class Utils { static QJsonObject parseJsonString(const std::wstring&); static QJsonObject parseJsonFile(const QString&); static bool updatesAllowed(); + static void addToRecent(const std::wstring&); #ifdef _WIN32 enum class WinVer : uchar { Undef, WinXP, WinVista, Win7, Win8, Win8_1, Win10, Win11 }; static WinVer getWinVersion(); - static void addToRecent(const std::wstring&); static bool isSessionInProgress(); static void setSessionInProgress(bool); #endif diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index 8ed8b34a8..c509c1b90 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -749,9 +749,7 @@ void CMainWindow::doOpenLocalFile(COpenOptions& opts) int result = m_pTabs->openLocalDocument(opts, true); if ( !(result < 0) ) { toggleButtonMain(false, true); -#ifdef _WIN32 Utils::addToRecent(opts.wurl); -#endif } else if (result == -255) { QTimer::singleShot(0, this, [=] { From 05e594e1d9a8e47dc7a77d20dc95a08374fc630b Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Tue, 12 Dec 2023 14:13:42 +0200 Subject: [PATCH 06/16] [linux] refactoring: hide dialog box icon on taskbar --- win-linux/src/platform_linux/gtkfilechooser.cpp | 1 + win-linux/src/platform_linux/gtkprintdialog.cpp | 1 + win-linux/src/platform_linux/updatedialog.cpp | 1 + win-linux/src/platform_linux/xcbutils.cpp | 9 +++++++++ 4 files changed, 12 insertions(+) diff --git a/win-linux/src/platform_linux/gtkfilechooser.cpp b/win-linux/src/platform_linux/gtkfilechooser.cpp index 42b5e18f0..f268233c0 100755 --- a/win-linux/src/platform_linux/gtkfilechooser.cpp +++ b/win-linux/src/platform_linux/gtkfilechooser.cpp @@ -93,6 +93,7 @@ static void nativeFileDialog(const Window &parent_xid, GTK_RESPONSE_ACCEPT, NULL); + gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE); //g_signal_connect(G_OBJECT(dialog), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(dialog), "realize", G_CALLBACK(set_parent), (gpointer)&parent_xid); g_signal_connect(G_OBJECT(dialog), "map_event", G_CALLBACK(set_focus), NULL); diff --git a/win-linux/src/platform_linux/gtkprintdialog.cpp b/win-linux/src/platform_linux/gtkprintdialog.cpp index bbd7a34f7..27bd99c1a 100644 --- a/win-linux/src/platform_linux/gtkprintdialog.cpp +++ b/win-linux/src/platform_linux/gtkprintdialog.cpp @@ -372,6 +372,7 @@ QDialog::DialogCode GtkPrintDialog::exec() GtkWidget *dialog; dialog = gtk_print_unix_dialog_new(m_title.toUtf8().data(), NULL); gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG); + gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE); GtkEntry *page_ranges_entry = NULL; g_signal_connect(G_OBJECT(dialog), "map", G_CALLBACK(get_page_ranges_entry), (gpointer)&page_ranges_entry); diff --git a/win-linux/src/platform_linux/updatedialog.cpp b/win-linux/src/platform_linux/updatedialog.cpp index d46226be6..157d687da 100644 --- a/win-linux/src/platform_linux/updatedialog.cpp +++ b/win-linux/src/platform_linux/updatedialog.cpp @@ -85,6 +85,7 @@ int WinDlg::showDialog(QWidget *parent, "%s", primaryText.toLocal8Bit().data()); + gtk_window_set_skip_taskbar_hint(GTK_WINDOW(dialog), TRUE); g_signal_connect(G_OBJECT(dialog), "realize", G_CALLBACK(set_parent), (gpointer)&parent_xid); g_signal_connect(G_OBJECT(dialog), "map_event", G_CALLBACK(set_focus), NULL); DialogTag tag; // unable to send parent_xid via g_signal_connect and "focus_out_event" diff --git a/win-linux/src/platform_linux/xcbutils.cpp b/win-linux/src/platform_linux/xcbutils.cpp index 27646464e..99cbb8d66 100644 --- a/win-linux/src/platform_linux/xcbutils.cpp +++ b/win-linux/src/platform_linux/xcbutils.cpp @@ -70,6 +70,14 @@ void XcbUtils::setNativeFocusTo(xcb_window_t window) } } +static void SetSkipTaskbar(Display* disp, Window win) +{ + Atom wm_state = XInternAtom(disp, "_NET_WM_STATE", True); + Atom wm_state_skip_taskbar = XInternAtom(disp, "_NET_WM_STATE_SKIP_TASKBAR", True); + if (wm_state != None && wm_state_skip_taskbar != None) + XChangeProperty(disp, win, wm_state, XA_ATOM, 32, PropModeReplace, (const unsigned char*)&wm_state_skip_taskbar, 1); +} + static void GetWindowName(Display* disp, Window win, char **name) { XClassHint* class_hint = NULL; class_hint = XAllocClassHint(); @@ -135,6 +143,7 @@ void XcbUtils::findWindowAsync(const char *window_name, if (strstr(name, window_name) != NULL) { if (IsVisible(disp, win_list[i])) { win_found = win_list[i]; + SetSkipTaskbar(disp, win_found); callback((xcb_window_t)win_found); } free(name); From 6cc5a66b040dc165d495f297b00e2f88ae413224 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Wed, 13 Dec 2023 15:52:10 +0300 Subject: [PATCH 07/16] added sk --- .../extras/update-daemon/res/langs/langs.iss | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index 5e56cc16c..ed5f69909 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -17,6 +17,7 @@ lv.CAPTION_TEXT =ONLYOFFICE atjaunināšanas pakalpojums nl.CAPTION_TEXT =ONLYOFFICE Update Service pl.CAPTION_TEXT =Usługa aktualizacji ONLYOFFICE pt_PT.CAPTION_TEXT =Serviço de atualização ONLYOFFICE +sk.CAPTION_TEXT =Servis aktualizácie ONLYOFFICE sl.CAPTION_TEXT =Storitev posodabljanja ONLYOFFICE tr.CAPTION_TEXT =ONLYOFFICE Güncelleme Hizmeti uk.CAPTION_TEXT =Служба оновлень ONLYOFFICE @@ -39,6 +40,7 @@ lv.MESSAGE_TEXT_ERR1 =Radās kļūda: nl.MESSAGE_TEXT_ERR1 =Er is een fout opgetreden: pl.MESSAGE_TEXT_ERR1 =Wystąpił błąd: pt_PT.MESSAGE_TEXT_ERR1 =Um erro ocorreu: +sk.MESSAGE_TEXT_ERR1 =Vyskytla sa chyba: sl.MESSAGE_TEXT_ERR1 =Pojavila se je napaka: tr.MESSAGE_TEXT_ERR1 =Bir hata oluştu: uk.MESSAGE_TEXT_ERR1 =Сталася помилка: @@ -61,6 +63,7 @@ lv.MESSAGE_TEXT_ERR2 =Dzēšot, radās kļūda: nl.MESSAGE_TEXT_ERR2 =Er is een fout opgetreden tijdens het verwijderen: pl.MESSAGE_TEXT_ERR2 =Wystąpił błąd podczas usuwania: pt_PT.MESSAGE_TEXT_ERR2 =Ocorreu um erro ao excluir: +sk.MESSAGE_TEXT_ERR2 =Pri vymazávaní došlo k chybe: sl.MESSAGE_TEXT_ERR2 =Pojavila se je napaka med brisanjem: tr.MESSAGE_TEXT_ERR2 =Silinirken bir hata oluştu: uk.MESSAGE_TEXT_ERR2 =Сталася помилка під час видалення: @@ -83,6 +86,7 @@ lv.MESSAGE_TEXT_ERR3 =Radās kļūda, veidojot: nl.MESSAGE_TEXT_ERR3 =Er is een fout opgetreden tijdens het aanmaken: pl.MESSAGE_TEXT_ERR3 =Wystąpił błąd podczas tworzenia: pt_PT.MESSAGE_TEXT_ERR3 =Ocorreu um erro ao criar: +sk.MESSAGE_TEXT_ERR3 =Pri vytváraní došlo k chybe: sl.MESSAGE_TEXT_ERR3 =Pojavila se je napaka md ustvarjanjem: tr.MESSAGE_TEXT_ERR3 =Oluşturulurken bir hata oluştu: uk.MESSAGE_TEXT_ERR3 =Сталася помилка під час створення: @@ -105,6 +109,7 @@ lv.MESSAGE_TEXT_ERR4 =Restartējot pakalpojumu, radās kļūda! nl.MESSAGE_TEXT_ERR4 =Er is een fout opgetreden tijdens het opnieuw opstarten van de service! pl.MESSAGE_TEXT_ERR4 =Wystąpił błąd podczas ponownego uruchamiania usługi! pt_PT.MESSAGE_TEXT_ERR4 =Ocorreu um erro ao reiniciar o serviço! +sk.MESSAGE_TEXT_ERR4 =Pri reštartovaní služby došlo k chybe! sl.MESSAGE_TEXT_ERR4 =Med ponovnim zagonom storitve je prišlo do napake! tr.MESSAGE_TEXT_ERR4 =Hizmet yeniden başlatılırken bir hata oluştu! uk.MESSAGE_TEXT_ERR4 =Сталася помилка під час перезапуску служби! @@ -127,6 +132,7 @@ lv.MESSAGE_TEXT_ERR5 =Atjaunināšana ir atcelta. Nevar atrast mapi: nl.MESSAGE_TEXT_ERR5 =Update geannuleerd. Kan map niet vinden: pl.MESSAGE_TEXT_ERR5 =Aktualizacja została anulowana. Nie można znaleźć katalogu: pt_PT.MESSAGE_TEXT_ERR5 =Atualização cancelada. Não foi possível encontrar a pasta: +sk.MESSAGE_TEXT_ERR5 =Aktualizácia zrušená. Nie je možné nájsť priečinok: sl.MESSAGE_TEXT_ERR5 =Posodobitev preklicana. Ne najdem mape: tr.MESSAGE_TEXT_ERR5 =Güncelleme iptal edildi. Klasör bulunamıyor: uk.MESSAGE_TEXT_ERR5 =Оновлення скасовано. Не вдається знайти папку: @@ -149,6 +155,7 @@ lv.MESSAGE_TEXT_ERR6 =Atjaunināšana ir atcelta. Trūkst faila paraksta: nl.MESSAGE_TEXT_ERR6 =Update geannuleerd. De bestandsondertekening ontbreekt: pl.MESSAGE_TEXT_ERR6 =Aktualizacja została anulowana. Brak podpisu pliku: pt_PT.MESSAGE_TEXT_ERR6 =Atualização cancelada. A assinatura do arquivo está faltando: +sk.MESSAGE_TEXT_ERR6 =Aktualizácia zrušená. Chýba podpis súboru: sl.MESSAGE_TEXT_ERR6 =Posodobitev preklicana. Manjka podpis datoteke: tr.MESSAGE_TEXT_ERR6 =Güncelleme iptal edildi. Dosya imzası eksik: uk.MESSAGE_TEXT_ERR6 =Оновлення скасовано. Відсутній підпис файлу: @@ -171,6 +178,7 @@ lv.MESSAGE_TEXT_ERR7 =Atjaunināšana ir atcelta. Nevar izdzēst mapi: nl.MESSAGE_TEXT_ERR7 =Update geannuleerd. Kan map niet verwijderen: pl.MESSAGE_TEXT_ERR7 =Aktualizacja została anulowana. Nie można usunąć katalogu: pt_PT.MESSAGE_TEXT_ERR7 =Atualização cancelada. Não é possível excluir a pasta: +sk.MESSAGE_TEXT_ERR7 =Aktualizácia zrušená. Nie je možné odstrániť priečinok: sl.MESSAGE_TEXT_ERR7 =Posodobitev preklicana. Mape ni mogoče izbrisati: tr.MESSAGE_TEXT_ERR7 =Güncelleme iptal edildi. Klasör silinemiyor: uk.MESSAGE_TEXT_ERR7 =Оновлення скасовано. Не вдається видалити папку: @@ -193,6 +201,7 @@ lv.MESSAGE_TEXT_ERR8 =Atjaunināšana ir atcelta. Programma nav aizvērta: nl.MESSAGE_TEXT_ERR8 =Update geannuleerd. Het programma is niet afgesloten: pl.MESSAGE_TEXT_ERR8 =Aktualizacja została anulowana. Program nie jest zamknięty: pt_PT.MESSAGE_TEXT_ERR8 =Atualização cancelada. O programa não está fechado: +sk.MESSAGE_TEXT_ERR8 =Aktualizácia zrušená. Program nie je ukončený: sl.MESSAGE_TEXT_ERR8 =Posodobitev preklicana. Program ni zaprt: tr.MESSAGE_TEXT_ERR8 =Güncelleme iptal edildi. Program kapalı değil: uk.MESSAGE_TEXT_ERR8 =Оновлення скасовано. Програма не закрита: @@ -215,6 +224,7 @@ lv.MESSAGE_TEXT_ERR9 =Atjaunināšana ir atcelta. Nevar izveidot mapi: nl.MESSAGE_TEXT_ERR9 =Update geannuleerd. Kan map niet aanmaken: pl.MESSAGE_TEXT_ERR9 =Aktualizacja została anulowana. Nie można utworzyć katalogu: pt_PT.MESSAGE_TEXT_ERR9 =Atualização cancelada. Não é possível criar a pasta: +sk.MESSAGE_TEXT_ERR9 =Aktualizácia zrušená. Nie je možné vytvoriť priečinok: sl.MESSAGE_TEXT_ERR9 =Posodobitev preklicana. Mape ni mogoče ustvariti: tr.MESSAGE_TEXT_ERR9 =Güncelleme iptal edildi. Klasör oluşturulamıyor: uk.MESSAGE_TEXT_ERR9 =Оновлення скасовано. Не вдається створити папку: @@ -237,6 +247,7 @@ lv.MESSAGE_TEXT_ERR10 =Atjaunināšana ir atcelta. Nevar aizstāt failus, lai du nl.MESSAGE_TEXT_ERR10 =Update geannuleerd. Kan bestanden niet vervangen voor back-up: pl.MESSAGE_TEXT_ERR10 =Aktualizacja została anulowana. Nie można zastąpić plików do utworzenia kopii zapasowej: pt_PT.MESSAGE_TEXT_ERR10 =Atualização cancelada. Não é possível substituir arquivos para backup: +sk.MESSAGE_TEXT_ERR10 =Aktualizácia zrušená. Nie je možné nahradiť súbory na zálohovanie: sl.MESSAGE_TEXT_ERR10 =Posodobitev preklicana. Datotek za varnostno kopiranje ni mogoče zamenjati: tr.MESSAGE_TEXT_ERR10 =Güncelleme iptal edildi. Yedeklenecek dosyalar değiştirilemiyor: uk.MESSAGE_TEXT_ERR10 =Оновлення скасовано. Не вдається замінити файли для резервної копії: @@ -259,6 +270,7 @@ lv.MESSAGE_TEXT_ERR11 =Nevar atjaunot failus no dublējuma! nl.MESSAGE_TEXT_ERR11 =Kan bestanden niet herstellen vanuit back-up! pl.MESSAGE_TEXT_ERR11 =Nie można przywrócić plików z kopii zapasowej! pt_PT.MESSAGE_TEXT_ERR11 =Não é possível restaurar arquivos do backup! +sk.MESSAGE_TEXT_ERR11 =Nie je možné obnoviť súbory zo zálohy! sl.MESSAGE_TEXT_ERR11 =Datotek ni mogoče obnoviti iz varnostne kopije! tr.MESSAGE_TEXT_ERR11 =Dosyalar yedeklemeden geri yüklenemiyor! uk.MESSAGE_TEXT_ERR11 =Не вдається відновити файли з резервної копії! @@ -281,6 +293,7 @@ lv.MESSAGE_TEXT_ERR12 =Atjaunināšana ir atcelta. Nevar pārvietot atjaunināju nl.MESSAGE_TEXT_ERR12 =Update geannuleerd. Kan updates niet verplaatsen naar App path: pl.MESSAGE_TEXT_ERR12 =Aktualizacja została anulowana. Nie można przenieść aktualizacji do ścieżki aplikacji: pt_PT.MESSAGE_TEXT_ERR12 =Atualização cancelada. Não é possível mover as atualizações para o caminho do aplicativo: +sk.MESSAGE_TEXT_ERR12 =Aktualizácia zrušená. Nie je možné presunúť aktualizácie do cesty k aplikácii: sl.MESSAGE_TEXT_ERR12 =Posodobitev preklicana. Posodobitev ni mogoče premakniti na pot aplikacije: tr.MESSAGE_TEXT_ERR12 =Güncelleme iptal edildi. Güncellemeler Uygulama yoluna taşınamıyor: uk.MESSAGE_TEXT_ERR12 =Оновлення скасовано. Не вдається перемістити оновлення до шляху застосунку: @@ -303,6 +316,7 @@ lv.MESSAGE_TEXT_ERR13 =Noņemot lietotnes ceļu, radās kļūda: nl.MESSAGE_TEXT_ERR13 =Er is een fout opgetreden tijdens het verwijderen van App path: pl.MESSAGE_TEXT_ERR13 =Wystąpił błąd podczas usuwania ścieżki aplikacji: pt_PT.MESSAGE_TEXT_ERR13 =Ocorreu um erro ao remover o caminho do aplicativo: +sk.MESSAGE_TEXT_ERR13 =Pri odstraňovaní cesty k aplikácii došlo k chybe: sl.MESSAGE_TEXT_ERR13 =Pri odstranjevanju poti aplikacije je prišlo do napake: tr.MESSAGE_TEXT_ERR13 =Uygulama yolu kaldırılırken bir hata oluştu: uk.MESSAGE_TEXT_ERR13 =Сталася помилка під час видалення шляху застосунку: @@ -325,6 +339,7 @@ lv.MESSAGE_TEXT_ERR14 =Atjaunojot failus no dublējuma, radās kļūda: nl.MESSAGE_TEXT_ERR14 =Er is een fout opgetreden tijdens het herstellen van bestanden vanaf een back-up: pl.MESSAGE_TEXT_ERR14 =Wystąpił błąd podczas próby przywrócenia plików z kopii zapasowej: pt_PT.MESSAGE_TEXT_ERR14 =Ocorreu um erro ao restaurar arquivos do backup: +sk.MESSAGE_TEXT_ERR14 =Pri obnovovaní súborov zo zálohy došlo k chybe: sl.MESSAGE_TEXT_ERR14 =Med obnavljanjem datotek iz varnostne kopije je prišlo do napake: tr.MESSAGE_TEXT_ERR14 =Yedeklemeden dosyalar geri yüklenirken bir hata oluştu: uk.MESSAGE_TEXT_ERR14 =Сталася помилка під час відновлення файлів із резервної копії: @@ -347,6 +362,7 @@ lv.MESSAGE_TEXT_ERR15 =Restartējot programmu, radās kļūda! nl.MESSAGE_TEXT_ERR15 =Er is een fout opgetreden tijdens het opnieuw opstarten van het programma! pl.MESSAGE_TEXT_ERR15 =Wystąpił błąd podczas ponownego uruchamiania programu! pt_PT.MESSAGE_TEXT_ERR15 =Ocorreu um erro ao reiniciar o programa! +sk.MESSAGE_TEXT_ERR15 =Pri reštartovaní programu došlo k chybe! sl.MESSAGE_TEXT_ERR15 =Pri ponovnem zagonu programa je prišlo do napake! tr.MESSAGE_TEXT_ERR15 =Program yeniden başlatılırken bir hata oluştu! uk.MESSAGE_TEXT_ERR15 =Сталася помилка під час перезапуску програми! @@ -369,6 +385,7 @@ lv.MESSAGE_TEXT_ERR16 =SDL init kļūda: nl.MESSAGE_TEXT_ERR16 =SDL init fout: pl.MESSAGE_TEXT_ERR16 =Błąd SDL init: pt_PT.MESSAGE_TEXT_ERR16 =Erro de inicialização SDL: +sk.MESSAGE_TEXT_ERR16 =Chyba SDL init: sl.MESSAGE_TEXT_ERR16 =Napaka pri zagonu SDL: tr.MESSAGE_TEXT_ERR16 =SDL başlatma hatası: uk.MESSAGE_TEXT_ERR16 =Помилка запуску SDL: @@ -391,6 +408,7 @@ lv.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher atgrieza kļūdu: nl.MESSAGE_TEXT_ERR17 =ONLYOFFICE Update Service pl.MESSAGE_TEXT_ERR17 =Funkcja ServiceCtrlDispatcher odesłała błąd: pt_PT.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: +sk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher vrátil chybu: sl.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher je vrnil napako: tr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hata döndürdü: uk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повернув помилку: \ No newline at end of file From aa84e99cc43d307e25d44eb92a6a5b66bc233415 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Wed, 13 Dec 2023 18:36:40 +0300 Subject: [PATCH 08/16] added vi --- .../extras/update-daemon/res/langs/langs.iss | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index ed5f69909..60e3c4dce 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -21,6 +21,7 @@ sk.CAPTION_TEXT =Servis aktualizácie ONLYOFFICE sl.CAPTION_TEXT =Storitev posodabljanja ONLYOFFICE tr.CAPTION_TEXT =ONLYOFFICE Güncelleme Hizmeti uk.CAPTION_TEXT =Служба оновлень ONLYOFFICE +vi.CAPTION_TEXT =Dịch vụ Cập nhật ONLYOFFICE en.MESSAGE_TEXT_ERR1 =An error occurred: ru.MESSAGE_TEXT_ERR1 =Произошла ошибка: @@ -44,6 +45,7 @@ sk.MESSAGE_TEXT_ERR1 =Vyskytla sa chyba: sl.MESSAGE_TEXT_ERR1 =Pojavila se je napaka: tr.MESSAGE_TEXT_ERR1 =Bir hata oluştu: uk.MESSAGE_TEXT_ERR1 =Сталася помилка: +vi.MESSAGE_TEXT_ERR1 =Đã xảy ra lỗi: en.MESSAGE_TEXT_ERR2 =An error occurred while deleting: ru.MESSAGE_TEXT_ERR2 =Произошла ошибка при удалении: @@ -67,6 +69,7 @@ sk.MESSAGE_TEXT_ERR2 =Pri vymazávaní došlo k chybe: sl.MESSAGE_TEXT_ERR2 =Pojavila se je napaka med brisanjem: tr.MESSAGE_TEXT_ERR2 =Silinirken bir hata oluştu: uk.MESSAGE_TEXT_ERR2 =Сталася помилка під час видалення: +vi.MESSAGE_TEXT_ERR2 =Đã xảy ra lỗi khi xóa: en.MESSAGE_TEXT_ERR3 =An error occurred while creating: ru.MESSAGE_TEXT_ERR3 =Произошла ошибка при создании: @@ -90,6 +93,7 @@ sk.MESSAGE_TEXT_ERR3 =Pri vytváraní došlo k chybe: sl.MESSAGE_TEXT_ERR3 =Pojavila se je napaka md ustvarjanjem: tr.MESSAGE_TEXT_ERR3 =Oluşturulurken bir hata oluştu: uk.MESSAGE_TEXT_ERR3 =Сталася помилка під час створення: +vi.MESSAGE_TEXT_ERR3 =Đã xảy ra lỗi khi tạo: en.MESSAGE_TEXT_ERR4 =An error occurred while restarting the service! ru.MESSAGE_TEXT_ERR4 =Произошла ошибка при перезапуске сервиса! @@ -113,6 +117,7 @@ sk.MESSAGE_TEXT_ERR4 =Pri reštartovaní služby došlo k chybe! sl.MESSAGE_TEXT_ERR4 =Med ponovnim zagonom storitve je prišlo do napake! tr.MESSAGE_TEXT_ERR4 =Hizmet yeniden başlatılırken bir hata oluştu! uk.MESSAGE_TEXT_ERR4 =Сталася помилка під час перезапуску служби! +vi.MESSAGE_TEXT_ERR4 =Đã xảy ra lỗi khi khởi động lại dịch vụ! en.MESSAGE_TEXT_ERR5 =Update cancelled. Can't find folder: ru.MESSAGE_TEXT_ERR5 =Обновление отменено. Не удалось найти папку: @@ -136,6 +141,7 @@ sk.MESSAGE_TEXT_ERR5 =Aktualizácia zrušená. Nie je možné nájsť priečinok sl.MESSAGE_TEXT_ERR5 =Posodobitev preklicana. Ne najdem mape: tr.MESSAGE_TEXT_ERR5 =Güncelleme iptal edildi. Klasör bulunamıyor: uk.MESSAGE_TEXT_ERR5 =Оновлення скасовано. Не вдається знайти папку: +vi.MESSAGE_TEXT_ERR5 =Đã hủy cập nhật. Không thể tìm thấy thư mục: en.MESSAGE_TEXT_ERR6 =Update cancelled. The file signature is missing: ru.MESSAGE_TEXT_ERR6 =Обновление отменено. Отсутствует подпись файла: @@ -159,6 +165,7 @@ sk.MESSAGE_TEXT_ERR6 =Aktualizácia zrušená. Chýba podpis súboru: sl.MESSAGE_TEXT_ERR6 =Posodobitev preklicana. Manjka podpis datoteke: tr.MESSAGE_TEXT_ERR6 =Güncelleme iptal edildi. Dosya imzası eksik: uk.MESSAGE_TEXT_ERR6 =Оновлення скасовано. Відсутній підпис файлу: +vi.MESSAGE_TEXT_ERR6 =Đã hủy cập nhật. Thiếu chữ ký tập tin: en.MESSAGE_TEXT_ERR7 =Update cancelled. Can't delete folder: ru.MESSAGE_TEXT_ERR7 =Обновление отменено. Не удалось удалить папку: @@ -182,6 +189,7 @@ sk.MESSAGE_TEXT_ERR7 =Aktualizácia zrušená. Nie je možné odstrániť prieč sl.MESSAGE_TEXT_ERR7 =Posodobitev preklicana. Mape ni mogoče izbrisati: tr.MESSAGE_TEXT_ERR7 =Güncelleme iptal edildi. Klasör silinemiyor: uk.MESSAGE_TEXT_ERR7 =Оновлення скасовано. Не вдається видалити папку: +vi.MESSAGE_TEXT_ERR7 =Đã hủy cập nhật. Không thể xóa thư mục: en.MESSAGE_TEXT_ERR8 =Update cancelled. The program is not closed: ru.MESSAGE_TEXT_ERR8 =Обновление отменено. Приложение не закрыто: @@ -205,6 +213,7 @@ sk.MESSAGE_TEXT_ERR8 =Aktualizácia zrušená. Program nie je ukončený: sl.MESSAGE_TEXT_ERR8 =Posodobitev preklicana. Program ni zaprt: tr.MESSAGE_TEXT_ERR8 =Güncelleme iptal edildi. Program kapalı değil: uk.MESSAGE_TEXT_ERR8 =Оновлення скасовано. Програма не закрита: +vi.MESSAGE_TEXT_ERR8 =Đã hủy cập nhật. Chương trình chưa được đóng: en.MESSAGE_TEXT_ERR9 =Update cancelled. Can't create folder: ru.MESSAGE_TEXT_ERR9 =Обновление отменено. Не удалось создать папку: @@ -228,6 +237,7 @@ sk.MESSAGE_TEXT_ERR9 =Aktualizácia zrušená. Nie je možné vytvoriť priečin sl.MESSAGE_TEXT_ERR9 =Posodobitev preklicana. Mape ni mogoče ustvariti: tr.MESSAGE_TEXT_ERR9 =Güncelleme iptal edildi. Klasör oluşturulamıyor: uk.MESSAGE_TEXT_ERR9 =Оновлення скасовано. Не вдається створити папку: +vi.MESSAGE_TEXT_ERR9 =Đã hủy cập nhật. Không thể tạo thư mục: en.MESSAGE_TEXT_ERR10 =Update cancelled. Can't replace files to backup: ru.MESSAGE_TEXT_ERR10 =Обновление отменено. Не удалось переместить файлы в резервную копию: @@ -251,6 +261,7 @@ sk.MESSAGE_TEXT_ERR10 =Aktualizácia zrušená. Nie je možné nahradiť súbory sl.MESSAGE_TEXT_ERR10 =Posodobitev preklicana. Datotek za varnostno kopiranje ni mogoče zamenjati: tr.MESSAGE_TEXT_ERR10 =Güncelleme iptal edildi. Yedeklenecek dosyalar değiştirilemiyor: uk.MESSAGE_TEXT_ERR10 =Оновлення скасовано. Не вдається замінити файли для резервної копії: +vi.MESSAGE_TEXT_ERR10 =Đã hủy cập nhật. Không thể thay thế tập tin để sao lưu: en.MESSAGE_TEXT_ERR11 =Can't restore files from backup! ru.MESSAGE_TEXT_ERR11 =Не удалось восстановить файлы из резервной копии! @@ -274,6 +285,7 @@ sk.MESSAGE_TEXT_ERR11 =Nie je možné obnoviť súbory zo zálohy! sl.MESSAGE_TEXT_ERR11 =Datotek ni mogoče obnoviti iz varnostne kopije! tr.MESSAGE_TEXT_ERR11 =Dosyalar yedeklemeden geri yüklenemiyor! uk.MESSAGE_TEXT_ERR11 =Не вдається відновити файли з резервної копії! +vi.MESSAGE_TEXT_ERR11 =Không thể khôi phục tập tin từ bản sao lưu! en.MESSAGE_TEXT_ERR12 =Update cancelled. Can't move updates to App path: ru.MESSAGE_TEXT_ERR12 =Обновление отменено. Не удалось переместить обновления в папку приложения: @@ -297,6 +309,7 @@ sk.MESSAGE_TEXT_ERR12 =Aktualizácia zrušená. Nie je možné presunúť aktual sl.MESSAGE_TEXT_ERR12 =Posodobitev preklicana. Posodobitev ni mogoče premakniti na pot aplikacije: tr.MESSAGE_TEXT_ERR12 =Güncelleme iptal edildi. Güncellemeler Uygulama yoluna taşınamıyor: uk.MESSAGE_TEXT_ERR12 =Оновлення скасовано. Не вдається перемістити оновлення до шляху застосунку: +vi.MESSAGE_TEXT_ERR12 =Đã hủy cập nhật. Không thể chuyển các bản cập nhật sang đường dẫn Ứng dụng: en.MESSAGE_TEXT_ERR13 =An error occurred while remove App path: ru.MESSAGE_TEXT_ERR13 =Произошла ошибка при удалении папки приложения: @@ -320,6 +333,7 @@ sk.MESSAGE_TEXT_ERR13 =Pri odstraňovaní cesty k aplikácii došlo k chybe: sl.MESSAGE_TEXT_ERR13 =Pri odstranjevanju poti aplikacije je prišlo do napake: tr.MESSAGE_TEXT_ERR13 =Uygulama yolu kaldırılırken bir hata oluştu: uk.MESSAGE_TEXT_ERR13 =Сталася помилка під час видалення шляху застосунку: +vi.MESSAGE_TEXT_ERR13 =Đã xảy ra lỗi khi xóa đường dẫn Ứng dụng: en.MESSAGE_TEXT_ERR14 =An error occurred while restore files from backup: ru.MESSAGE_TEXT_ERR14 =Произошла ошибка при восстановлении файлов из резервной копии: @@ -343,6 +357,7 @@ sk.MESSAGE_TEXT_ERR14 =Pri obnovovaní súborov zo zálohy došlo k chybe: sl.MESSAGE_TEXT_ERR14 =Med obnavljanjem datotek iz varnostne kopije je prišlo do napake: tr.MESSAGE_TEXT_ERR14 =Yedeklemeden dosyalar geri yüklenirken bir hata oluştu: uk.MESSAGE_TEXT_ERR14 =Сталася помилка під час відновлення файлів із резервної копії: +vi.MESSAGE_TEXT_ERR14 =Đã xảy ra lỗi khi khôi phục tập tin từ bản sao lưu: en.MESSAGE_TEXT_ERR15 =An error occurred while restarting the program! ru.MESSAGE_TEXT_ERR15 =Произошла ошибка при перезапуске приложения! @@ -366,6 +381,7 @@ sk.MESSAGE_TEXT_ERR15 =Pri reštartovaní programu došlo k chybe! sl.MESSAGE_TEXT_ERR15 =Pri ponovnem zagonu programa je prišlo do napake! tr.MESSAGE_TEXT_ERR15 =Program yeniden başlatılırken bir hata oluştu! uk.MESSAGE_TEXT_ERR15 =Сталася помилка під час перезапуску програми! +vi.MESSAGE_TEXT_ERR15 =Đã xảy ra lỗi khi khởi động lại chương trình! en.MESSAGE_TEXT_ERR16 =SDL init error: ru.MESSAGE_TEXT_ERR16 =Ошибка инициализации SDL: @@ -389,6 +405,7 @@ sk.MESSAGE_TEXT_ERR16 =Chyba SDL init: sl.MESSAGE_TEXT_ERR16 =Napaka pri zagonu SDL: tr.MESSAGE_TEXT_ERR16 =SDL başlatma hatası: uk.MESSAGE_TEXT_ERR16 =Помилка запуску SDL: +vi.MESSAGE_TEXT_ERR16 =Lỗi khởi tạo SDL: en.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher returned error: ru.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher вернул ошибку: @@ -411,4 +428,5 @@ pt_PT.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher retornou erro: sk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher vrátil chybu: sl.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher je vrnil napako: tr.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hata döndürdü: -uk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повернув помилку: \ No newline at end of file +uk.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher повернув помилку: +vi.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher đã trả lỗi: \ No newline at end of file From 33e96341fe209e12aae09e08ff0d0d5a8a8b4af7 Mon Sep 17 00:00:00 2001 From: Maria-Sukhova Date: Thu, 14 Dec 2023 12:08:54 +0300 Subject: [PATCH 09/16] added fi --- .../extras/update-daemon/res/langs/langs.iss | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/win-linux/extras/update-daemon/res/langs/langs.iss b/win-linux/extras/update-daemon/res/langs/langs.iss index 60e3c4dce..4cf6745e1 100644 --- a/win-linux/extras/update-daemon/res/langs/langs.iss +++ b/win-linux/extras/update-daemon/res/langs/langs.iss @@ -11,6 +11,7 @@ zh_CN.CAPTION_TEXT =ONLYOFFICE 更新服务 bg.CAPTION_TEXT =ONLYOFFICE Услуга за Актуализации cs.CAPTION_TEXT =Aktualizační služba ONLYOFFICE el.CAPTION_TEXT =Υπηρεσία ενημέρωσης ONLYOFFICE +fi.CAPTION_TEXT =ONLYOFFICE Päivityspalvelu hy.CAPTION_TEXT =ONLYOFFICE-ի թարմացման ծառայություն ko.CAPTION_TEXT =ONLYOFFICE 업데이트 서비스 lv.CAPTION_TEXT =ONLYOFFICE atjaunināšanas pakalpojums @@ -35,6 +36,7 @@ zh_CN.MESSAGE_TEXT_ERR1 =发生错误: bg.MESSAGE_TEXT_ERR1 =Възникна грешка: cs.MESSAGE_TEXT_ERR1 =Došlo k chybě: el.MESSAGE_TEXT_ERR1 =Εμφανίστηκε σφάλμα: +fi.MESSAGE_TEXT_ERR1 =Tapahtui virhe: hy.MESSAGE_TEXT_ERR1 =Սխալ է տեղի ունեցել․ ko.MESSAGE_TEXT_ERR1 =오류가 발생했습니다: lv.MESSAGE_TEXT_ERR1 =Radās kļūda: @@ -59,6 +61,7 @@ zh_CN.MESSAGE_TEXT_ERR2 =删除时出错: bg.MESSAGE_TEXT_ERR2 =Възникна грешка при изтриването: cs.MESSAGE_TEXT_ERR2 =Při mazání došlo k chybě: el.MESSAGE_TEXT_ERR2 =Προέκυψε σφάλμα κατά τη διαγραφή: +fi.MESSAGE_TEXT_ERR2 =Virhe poistaessa: hy.MESSAGE_TEXT_ERR2 =Ջնջելիս սխալ է տեղի ունեցել՝ ko.MESSAGE_TEXT_ERR2 =삭제하는 동안 오류가 발생했습니다: lv.MESSAGE_TEXT_ERR2 =Dzēšot, radās kļūda: @@ -83,6 +86,7 @@ zh_CN.MESSAGE_TEXT_ERR3 =创建时出错: bg.MESSAGE_TEXT_ERR3 =Възникна грешка при създаването: cs.MESSAGE_TEXT_ERR3 =Při vytváření došlo k chybě: el.MESSAGE_TEXT_ERR3 =Εμφανίστηκε σφάλμα κατά τη δημιουργία: +fi.MESSAGE_TEXT_ERR3 =Virhe luodessa: hy.MESSAGE_TEXT_ERR3 =Սխալ է տեղի ունեցել ստեղծելիս՝ ko.MESSAGE_TEXT_ERR3 =생성하는 동안 오류가 발생했습니다: lv.MESSAGE_TEXT_ERR3 =Radās kļūda, veidojot: @@ -107,6 +111,7 @@ zh_CN.MESSAGE_TEXT_ERR4 =重新启动服务时出错! bg.MESSAGE_TEXT_ERR4 =Възникна грешка при рестартирането на услугата! cs.MESSAGE_TEXT_ERR4 =Při restartování služby došlo k chybě! el.MESSAGE_TEXT_ERR4 =Εμφανίστηκε σφάλμα κατά την επανεκκίνηση της υπηρεσίας! +fi.MESSAGE_TEXT_ERR4 =Virhe palvelun uudelleen käynnistämisessä! hy.MESSAGE_TEXT_ERR4 =Սխալ է տեղի ունեցել ծառայությունը վերագործարկելիս․ ko.MESSAGE_TEXT_ERR4 =서비스를 다시 시작하는 동안 오류가 발생했습니다! lv.MESSAGE_TEXT_ERR4 =Restartējot pakalpojumu, radās kļūda! @@ -131,6 +136,7 @@ zh_CN.MESSAGE_TEXT_ERR5 =更新已取消。找不到文件夹: bg.MESSAGE_TEXT_ERR5 =Актуализацията е отменена. Не откриваме папка: cs.MESSAGE_TEXT_ERR5 =Aktualizace byla zrušena. Nelze najít složku: el.MESSAGE_TEXT_ERR5 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να βρεθεί ο φάκελος: +fi.MESSAGE_TEXT_ERR5 =Päivitys peruutettu. Kansiota ei löydy. hy.MESSAGE_TEXT_ERR5 =Թարմացումը չեղարկվել է: Թղթապանակը չի գտնվել՝ ko.MESSAGE_TEXT_ERR5 =업데이트가 취소되었습니다. 폴더를 찾을 수 없습니다: lv.MESSAGE_TEXT_ERR5 =Atjaunināšana ir atcelta. Nevar atrast mapi: @@ -155,6 +161,7 @@ zh_CN.MESSAGE_TEXT_ERR6 =更新已取消。 文件签名丢失: bg.MESSAGE_TEXT_ERR6 =Актуализацията е отменена. Подписът на файла липсва: cs.MESSAGE_TEXT_ERR6 =Aktualizace zrušena. Chybí podpis souboru: el.MESSAGE_TEXT_ERR6 =Η ενημέρωση ακυρώθηκε. Λείπει η υπογραφή του αρχείου: +fi.MESSAGE_TEXT_ERR6 =Päivitys peruutettu. Tiedoston allekirjoitus puuttuu: hy.MESSAGE_TEXT_ERR6 =Թարմացումը չեղարկվել է: Ֆայլի ստորագրությունը բացակայում է․ ko.MESSAGE_TEXT_ERR6 =업데이트가 취소되었습니다. 파일 서명이 누락되었습니다: lv.MESSAGE_TEXT_ERR6 =Atjaunināšana ir atcelta. Trūkst faila paraksta: @@ -179,6 +186,7 @@ zh_CN.MESSAGE_TEXT_ERR7 =更新已取消。 无法删除文件夹: bg.MESSAGE_TEXT_ERR7 =Актуализацията е отменена. Папката не може да се изтрие: cs.MESSAGE_TEXT_ERR7 =Aktualizace zrušena. Nelze smazat složku: el.MESSAGE_TEXT_ERR7 =Η ενημέρωση ακυρώθηκε. Δεν είναι δυνατή η διαγραφή φακέλου: +fi.MESSAGE_TEXT_ERR7 =Päivitys peruutettu. Kansiota ei voi poistaa: hy.MESSAGE_TEXT_ERR7 =Թարմացումը չեղարկվել է: Հնարավոր չէ ջնջել պանակը՝ ko.MESSAGE_TEXT_ERR7 =업데이트가 취소되었습니다. 폴더를 삭제할 수 없습니다: lv.MESSAGE_TEXT_ERR7 =Atjaunināšana ir atcelta. Nevar izdzēst mapi: @@ -203,6 +211,7 @@ zh_CN.MESSAGE_TEXT_ERR8 =更新已取消。 程序未关闭: bg.MESSAGE_TEXT_ERR8 =Актуализацията е отменена. Програмата не е затворена: cs.MESSAGE_TEXT_ERR8 =Aktualizace zrušena. Program není uzavřen: el.MESSAGE_TEXT_ERR8 =Η ενημέρωση ακυρώθηκε. Το πρόγραμμα δεν έχει κλείσει: +fi.MESSAGE_TEXT_ERR8 =Päivitys peruutettu. Ohjelmaa ei ole suljettu: hy.MESSAGE_TEXT_ERR8 =Թարմացումը չեղարկվել է: Ծրագիրը փակված չէ։ ko.MESSAGE_TEXT_ERR8 =업데이트가 취소되었습니다. 프로그램이 종료되지 않았습니다: lv.MESSAGE_TEXT_ERR8 =Atjaunināšana ir atcelta. Programma nav aizvērta: @@ -227,6 +236,7 @@ zh_CN.MESSAGE_TEXT_ERR9 =更新已取消。 无法创建文件夹: bg.MESSAGE_TEXT_ERR9 =Актуализацията е отменена. Папката не може да се създаде: cs.MESSAGE_TEXT_ERR9 =Aktualizace zrušena. Nelze vytvořit složku: el.MESSAGE_TEXT_ERR9 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να δημιουργηθεί φάκελος: +fi.MESSAGE_TEXT_ERR9 =Päivitys peruutettu. Kansiota ei voi luoda: hy.MESSAGE_TEXT_ERR9 =Թարմացումը չեղարկվել է: Թղթապանակ ստեղծել հնարավոր չէ՝ ko.MESSAGE_TEXT_ERR9 =업데이트가 취소되었습니다. 폴더를 생성할 수 없습니다: lv.MESSAGE_TEXT_ERR9 =Atjaunināšana ir atcelta. Nevar izveidot mapi: @@ -251,6 +261,7 @@ zh_CN.MESSAGE_TEXT_ERR10 =更新已取消。 无法替换要备份的文件: bg.MESSAGE_TEXT_ERR10 =Актуализацията е отменена. Не могат да се заменят файловете за архивиране: cs.MESSAGE_TEXT_ERR10 =Aktualizace zrušena. Nelze nahradit soubory do zálohy: el.MESSAGE_TEXT_ERR10 =Η ενημέρωση ακυρώθηκε. Δεν μπορεί να αντικαταστήσει αρχεία για δημιουργία αντιγράφων ασφαλείας: +fi.MESSAGE_TEXT_ERR10 =Päivitys peruutettu. Varmuuskopioitavia tiedostoja ei voi korvata: hy.MESSAGE_TEXT_ERR10 =Թարմացումը չեղարկվել է: Հնարավոր չէ փոխարինել ֆայլերը կրկնօրինակում՝ ko.MESSAGE_TEXT_ERR10 =업데이트가 취소되었습니다. 백업할 파일을 교체할 수 없습니다: lv.MESSAGE_TEXT_ERR10 =Atjaunināšana ir atcelta. Nevar aizstāt failus, lai dublētu: @@ -275,6 +286,7 @@ zh_CN.MESSAGE_TEXT_ERR11 =无法从备份中恢复文件! bg.MESSAGE_TEXT_ERR11 =Файловете от резервното копие не могат да се възстановят! cs.MESSAGE_TEXT_ERR11 =Nelze obnovit soubory ze zálohy! el.MESSAGE_TEXT_ERR11 =Δεν είναι δυνατή η επαναφορά αρχείων από το αντίγραφο ασφαλείας! +fi.MESSAGE_TEXT_ERR11 =Tiedostoja ei voi palauttaa varmuuskopiosta! hy.MESSAGE_TEXT_ERR11 =Հնարավոր չէ վերականգնել ֆայլերը կրկնօրինակումից։ ko.MESSAGE_TEXT_ERR11 =백업에서 파일을 복원할 수 없습니다! lv.MESSAGE_TEXT_ERR11 =Nevar atjaunot failus no dublējuma! @@ -299,6 +311,7 @@ zh_CN.MESSAGE_TEXT_ERR12 =更新已取消。 无法将更新文件移动到应 bg.MESSAGE_TEXT_ERR12 =Актуализацията е отменена. Не можете да местите актуализации към пътя на Приложението: cs.MESSAGE_TEXT_ERR12 =Aktualizace zrušena. Nelze přesunout aktualizace do cesty k aplikaci: el.MESSAGE_TEXT_ERR12 =Η ενημέρωση ακυρώθηκε. Δεν είναι δυνατή η μετακίνηση ενημερώσεων στη διαδρομή της εφαρμογής: +fi.MESSAGE_TEXT_ERR12 =Päivitys peruutettu. Päivityksiä ei voi siirtää sovelluspolkuun: hy.MESSAGE_TEXT_ERR12 =Թարմացումը չեղարկվել է: Հնարավոր չէ թարմացումները տեղափոխել App(հավելված) path ko.MESSAGE_TEXT_ERR12 =업데이트가 취소되었습니다. 업데이트를 앱 경로로 이동할 수 없습니다: lv.MESSAGE_TEXT_ERR12 =Atjaunināšana ir atcelta. Nevar pārvietot atjauninājumus uz lietotnes ceļu: @@ -323,6 +336,7 @@ zh_CN.MESSAGE_TEXT_ERR13 =删除应用程序路径时出错: bg.MESSAGE_TEXT_ERR13 =Възникна грешка при премахване пътя на Приложението: cs.MESSAGE_TEXT_ERR13 =Při odebírání cesty k aplikaci došlo k chybě: el.MESSAGE_TEXT_ERR13 =Παρουσιάστηκε σφάλμα κατά την αφαίρεση της διαδρομής της εφαρμογής: +fi.MESSAGE_TEXT_ERR13 =Virhe poistaessa sovelluspolkua: hy.MESSAGE_TEXT_ERR13 =App path-ը հեռացնելիս սխալ առաջացավ՝ ko.MESSAGE_TEXT_ERR13 =앱 경로를 삭제하는 동안 오류가 발생했습니다: lv.MESSAGE_TEXT_ERR13 =Noņemot lietotnes ceļu, radās kļūda: @@ -347,6 +361,7 @@ zh_CN.MESSAGE_TEXT_ERR14 =从备份恢复文件时出错: bg.MESSAGE_TEXT_ERR14 =Възникна грешка при възстановяване на файлове от резервно копие: cs.MESSAGE_TEXT_ERR14 =Při obnově souborů ze zálohy došlo k chybě: el.MESSAGE_TEXT_ERR14 =Εμφανίστηκε σφάλμα κατά την επαναφορά αρχείων από αντίγραφο ασφαλείας: +fi.MESSAGE_TEXT_ERR14 =Virhe palautettaessa tiedostoja varmuuskopiosta: hy.MESSAGE_TEXT_ERR14 =Սխալ է տեղի ունեցել ֆայլերը կրկնօրինակումից վերականգնելիս՝ ko.MESSAGE_TEXT_ERR14 =백업에서 파일을 복원하는 동안 오류가 발생했습니다: lv.MESSAGE_TEXT_ERR14 =Atjaunojot failus no dublējuma, radās kļūda: @@ -371,6 +386,7 @@ zh_CN.MESSAGE_TEXT_ERR15 =重新启动程序时出错! bg.MESSAGE_TEXT_ERR15 =Възникна грешка при рестартиране на програмата! cs.MESSAGE_TEXT_ERR15 =Při restartování programu došlo k chybě! el.MESSAGE_TEXT_ERR15 =Εμφανίστηκε σφάλμα κατά την επανεκκίνηση του προγράμματος! +fi.MESSAGE_TEXT_ERR15 =Virhe ohjelmaa uudelleen käynnistettäessä! hy.MESSAGE_TEXT_ERR15 =Ծրագիրը վերագործարկելիս սխալ է տեղի ունեցել: ko.MESSAGE_TEXT_ERR15 =프로그램을 다시 시작하는 동안 오류가 발생했습니다! lv.MESSAGE_TEXT_ERR15 =Restartējot programmu, radās kļūda! @@ -395,6 +411,7 @@ zh_CN.MESSAGE_TEXT_ERR16 =SDL 初始化错误: bg.MESSAGE_TEXT_ERR16 =Грешка при стартиране на SDL: cs.MESSAGE_TEXT_ERR16 =Chyba při inicializaci SDL: el.MESSAGE_TEXT_ERR16 =Σφάλμα εκκίνησης SDL: +fi.MESSAGE_TEXT_ERR16 =SDL-aloitusvirhe: hy.MESSAGE_TEXT_ERR16 =SDL սկզբնական սխալ. ko.MESSAGE_TEXT_ERR16 =SDL 초기화 오류: lv.MESSAGE_TEXT_ERR16 =SDL init kļūda: @@ -419,6 +436,7 @@ zh_CN.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher 返回错误: bg.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher върна грешка: cs.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher hlásí chybu: el.MESSAGE_TEXT_ERR17 =Το ServiceCtrlDispatcher επέστρεψε σφάλμα: +fi.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher palautti virheen: hy.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher-ը վերադարձրեց սխալը. ko.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher가 오류를 반환했습니다: lv.MESSAGE_TEXT_ERR17 =ServiceCtrlDispatcher atgrieza kļūdu: From ea657469f3e9761fb0b970c5061bd2da546c29c4 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 20 Dec 2023 10:32:23 +0200 Subject: [PATCH 10/16] [win-linux] ctabar: refactoring --- win-linux/src/components/ctabbar.cpp | 70 ++++++++++++---------------- 1 file changed, 29 insertions(+), 41 deletions(-) diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index a54d1ebf6..40a0856c4 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -54,6 +54,7 @@ #define tabIndex(i) tabList[i]->index #define signum(a) (a ? 1 : -1); #define PROCESSEVENTS() AscAppManager::getInstance().processEvents() +#define SKIP_EVENTS_QUEUE(callback) QTimer::singleShot(0, this, callback) class Tab : public QFrame @@ -269,7 +270,7 @@ void Tab::resizeEvent(QResizeEvent *event) } else { if (tab_width != new_width) { tab_width = new_width; - QTimer::singleShot(0, this, [=]() { + SKIP_EVENTS_QUEUE([=]() { emit onTabWidthChanged(tab_width); }); } @@ -316,6 +317,7 @@ class CTabBar::CTabBarPrivate Left, Right }; + Tab* createTab(int posX, const QString &text); int getIntersectedOffset(int index); int getIntersectedIndex(int direction, int &offsetX); int getLayoutsIntersectedIndex(Tab *tab, int &offsetX); @@ -362,6 +364,28 @@ CTabBar::CTabBarPrivate::CTabBarPrivate(CTabBar* owner) : CTabBar::CTabBarPrivate::~CTabBarPrivate() {} +Tab* CTabBar::CTabBarPrivate::createTab(int posX, const QString &text) +{ + Tab *tab = new Tab(tabArea); + tab->move(posX, 0); + tab->setFixedHeight(tabArea->height()); + tab->setText(text, elideMode); + if (tab->icon_label->minimumSize().isNull()) { + tab->icon_label->setBaseSize(iconSize); + tab->icon_label->setFixedSize(iconSize); + } + connect(tab->close_btn, &QToolButton::clicked, tab, [=]() { + emit owner->tabCloseRequested(tab->index); + }); + connect(tab, &Tab::onTabWidthChanged, tab, [=](int width) { + if (tab_width != width) { + tab_width = width; + onTabWidthChanged(width); + } + }); + return tab; +} + int CTabBar::CTabBarPrivate::getIntersectedOffset(int index) { if (indexIsValid(index)) { @@ -635,25 +659,9 @@ int CTabBar::addTab(const QString &text) const int lastIndex = d->tabList.size() - 1; const int posX = (lastIndex == -1) ? 0 : d->nextTabPosByPrev(lastIndex); - Tab *tab = new Tab(d->tabArea); - tab->move(posX, 0); - tab->setFixedHeight(d->tabArea->height()); - tab->setText(text, d->elideMode); - if (tab->icon_label->minimumSize().isNull()) { - tab->icon_label->setBaseSize(d->iconSize); - tab->icon_label->setFixedSize(d->iconSize); - } + Tab *tab = d->createTab(posX, text); tab->index = lastIndex + 1; d->tabList.append(tab); - connect(tab->close_btn, &QToolButton::clicked, this, [=]() { - emit tabCloseRequested(tab->index); - }); - connect(tab, &Tab::onTabWidthChanged, this, [=](int width) { - if (d->tab_width != width) { - d->tab_width = width; - d->onTabWidthChanged(width); - } - }); tabInserted(lastIndex + 1); d->onCurrentChanged(lastIndex + 1); return d->currentIndex; @@ -694,35 +702,15 @@ int CTabBar::insertTab(int index, const QString &text) if (!d->indexIsValid(index)) return addTab(text); - while (d->animationInProgress) - PROCESSEVENTS(); - int posX = d->_tabRect(index).left(); d->slide(index, d->tabList.size() - 1, d->cellWidth(), ANIMATION_DEFAULT_MS); while (d->animationInProgress) PROCESSEVENTS(); - Tab *tab = new Tab(d->tabArea); - tab->move(posX, 0); - tab->setFixedHeight(d->tabArea->height()); - tab->setText(text, d->elideMode); - if (tab->icon_label->minimumSize().isNull()) { - tab->icon_label->setBaseSize(d->iconSize); - tab->icon_label->setFixedSize(d->iconSize); - } + Tab *tab = d->createTab(posX, text); d->tabList.insert(index, tab); for (int i = index; i < d->tabList.size(); i++) d->tabIndex(i) = i; - - connect(tab->close_btn, &QToolButton::clicked, this, [=]() { - emit tabCloseRequested(tab->index); - }); - connect(tab, &Tab::onTabWidthChanged, this, [=](int width) { - if (d->tab_width != width) { - d->tab_width = width; - d->onTabWidthChanged(width); - } - }); tabInserted(index); d->onCurrentChanged(index); return d->currentIndex; @@ -863,7 +851,7 @@ void CTabBar::setTabIcon(int index, const QIcon &icon) void CTabBar::setTabText(int index, const QString &text) { if (d->indexIsValid(index)) - d->tabList[index]->setText(text); + d->tabList[index]->setText(text, d->elideMode); } void CTabBar::setTabToolTip(int index, const QString &text) @@ -1097,7 +1085,7 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) d->movedTab->hide(); d->movedTab = nullptr; d->movedTabIndex = -1; - QTimer::singleShot(0, this, [=]() { + SKIP_EVENTS_QUEUE([=]() { removeTab(d->currentIndex); while (d->animationInProgress) PROCESSEVENTS(); From 2ad2aee4530621042809ee1cbe824a1f6d0bb0f2 Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 20 Dec 2023 10:32:56 +0200 Subject: [PATCH 11/16] [win-linux] ceditorwindow: debug --- win-linux/src/windows/ceditorwindow_p.h | 1 + 1 file changed, 1 insertion(+) diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index ce628b435..ee5be227f 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -747,6 +747,7 @@ class CEditorWindowPrivate : public CCefEventsGate iconcrypted->setPixmap(QIcon{":/title/icons/secure.svg"}.pixmap(QSize(20,20) * window->m_dpiRatio)); iconcrypted->setFixedSize(ICON_SIZE * window->m_dpiRatio); + iconcrypted->show(); int y = (window->m_labelTitle->height() - ICON_SIZE.height() * window->m_dpiRatio)/2; iconcrypted->move(0, y); connect(window->m_labelTitle, &CElipsisLabel::onResize, this, [=](QSize size, int textWidth) { From c41c1aeea21d25e22f3d317da5da262d455e3aac Mon Sep 17 00:00:00 2001 From: SimplestStudio Date: Wed, 20 Dec 2023 10:35:29 +0200 Subject: [PATCH 12/16] [win-linux] add feature: RTL mode --- win-linux/res/styles/styles.qss | 28 +++++---- win-linux/res/styles/styles@1.25x.qss | 2 + win-linux/res/styles/styles@1.5x.qss | 2 + win-linux/res/styles/styles@1.75x.qss | 2 + win-linux/res/styles/styles@2.25x.qss | 2 + win-linux/res/styles/styles@2.5x.qss | 2 + win-linux/res/styles/styles@2.75x.qss | 2 + win-linux/res/styles/styles@2x.qss | 2 + win-linux/res/styles/styles@3.5x.qss | 2 + win-linux/res/styles/styles@3x.qss | 2 + win-linux/res/styles/styles@4.5x.qss | 2 + win-linux/res/styles/styles@4x.qss | 2 + win-linux/res/styles/styles@5x.qss | 2 + win-linux/res/styles/tabbar.qss | 19 ++++++- .../src/cascapplicationmanagerwrapper.cpp | 39 +++++++++++++ win-linux/src/cascapplicationmanagerwrapper.h | 3 + win-linux/src/clangater.cpp | 5 ++ win-linux/src/clangater.h | 1 + win-linux/src/components/asctabwidget.cpp | 31 ++++++++-- win-linux/src/components/cdownloadwidget.cpp | 26 ++++++++- win-linux/src/components/cdownloadwidget.h | 1 + win-linux/src/components/celipsislabel.cpp | 12 ++++ win-linux/src/components/celipsislabel.h | 1 + win-linux/src/components/ctabbar.cpp | 57 +++++++++++++++++-- win-linux/src/components/ctabbar.h | 3 +- .../src/platform_linux/gtkfilechooser.cpp | 4 ++ win-linux/src/platform_linux/gtkmessage.cpp | 3 + .../src/platform_linux/gtkprintdialog.cpp | 3 + win-linux/src/platform_linux/updatedialog.cpp | 4 ++ win-linux/src/platform_win/message.cpp | 3 + win-linux/src/platform_win/updatedialog.cpp | 3 + win-linux/src/prop/cmainwindowimpl.cpp | 2 + win-linux/src/windows/ceditorwindow.cpp | 5 ++ win-linux/src/windows/ceditorwindow.h | 1 + win-linux/src/windows/ceditorwindow_p.h | 33 ++++++++++- win-linux/src/windows/cmainwindow.cpp | 17 +++++- win-linux/src/windows/cmainwindow.h | 1 + win-linux/src/windows/cpresenterwindow.cpp | 5 ++ win-linux/src/windows/cpresenterwindow.h | 1 + .../platform_linux/cwindowplatform.cpp | 8 +++ .../windows/platform_linux/cwindowplatform.h | 1 + .../windows/platform_win/cwindowplatform.cpp | 13 +++++ .../windows/platform_win/cwindowplatform.h | 2 + 43 files changed, 331 insertions(+), 28 deletions(-) diff --git a/win-linux/res/styles/styles.qss b/win-linux/res/styles/styles.qss index 7d12e1abb..e0c6e212f 100644 --- a/win-linux/res/styles/styles.qss +++ b/win-linux/res/styles/styles.qss @@ -93,8 +93,10 @@ QPushButton#toolButtonMain { font-size: 10px; font-family: 'Open Sans',sans-serif; font-weight: bold; + border-left: 0px; border-right: 1px solid #f1f1f1; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-right: 0px; border-left: 1px solid #f1f1f1;} /*QPushButton#toolButtonMain[theme=light] {*/ /* border: 1px solid #b6b6b6;*/ @@ -117,8 +119,9 @@ QPushButton#toolButtonMain[class=normal], QPushButton#toolButtonMain[class=normal] { background: #f1f1f1; - border-right-color: #dfdfdf; + border-color: #dfdfdf; } +#mainPanel[rtl=true] QPushButton#toolButtonMain[class=normal] {border-color: #dfdfdf;} QPushButton#toolButtonMain[class=normal]:hover { background: #cecece; @@ -145,7 +148,8 @@ QPushButton::menu-indicator {width: 0px; height: 0px;} /*border-image: url(:/res/icons/menu-indicator-dark.png) 0 10 0 0 repeat repeat;*/ /*}*/ -QPushButton#toolButtonDownload {border-right: 1px solid #dfdfdf; max-width: 40px; width: 40px; max-height: 28px; height: 28px;} +QPushButton#toolButtonDownload {border-left: 0px; border-right: 1px solid #dfdfdf; max-width: 40px; width: 40px; max-height: 28px; height: 28px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-right: 0px; border-left: 1px solid #dfdfdf;} /**************************/ /* dark theme definitions */ @@ -160,9 +164,11 @@ QPushButton#toolButtonDownload {border-right: 1px solid #dfdfdf; max-width: 40px color: #d9d9d9; } -#mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload, +#mainPanel[uitheme=theme-dark] QPushButton#toolButtonDownload { + border-color: #505050; +} #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMain { - border-right-color: #333; + border-color: #333; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMain[class=active] { @@ -171,7 +177,7 @@ QPushButton#toolButtonDownload {border-right: 1px solid #dfdfdf; max-width: 40px #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMain[class=normal] { background: #404040; - border-right-color: #505050; + border-color: #505050; } #mainPanel[uitheme=theme-dark] QPushButton#toolButtonMain[class=normal]:hover { @@ -223,14 +229,16 @@ QPushButton#toolButtonDownload {border-right: 1px solid #dfdfdf; max-width: 40px background: #1e1e1e; } -#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonDownload, +#mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonDownload { + border-color: #414141; +} #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain { - border-right-color: #1e1e1e; + border-color: #1e1e1e; } #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal] { background: #2a2a2a; - border-right-color: #414141; + border-color: #414141; } #mainPanel[uitheme=theme-contrast-dark] QPushButton#toolButtonMain[class=normal]:hover { @@ -249,11 +257,11 @@ QPushButton#toolButtonDownload {border-right: 1px solid #dfdfdf; max-width: 40px /***********************************/ #mainPanel[uitheme=theme-classic-light] QPushButton#toolButtonMain { - border-right-color: #f1f1f1; + border-color: #f1f1f1; } #mainPanel[uitheme=theme-classic-light] QPushButton#toolButtonMain[class=normal] { - border-right-color: #cbcbcb; + border-color: #cbcbcb; } diff --git a/win-linux/res/styles/styles@1.25x.qss b/win-linux/res/styles/styles@1.25x.qss index 9ec5f21f0..f569d11e7 100644 --- a/win-linux/res/styles/styles@1.25x.qss +++ b/win-linux/res/styles/styles@1.25x.qss @@ -25,6 +25,7 @@ QPushButton#toolButtonMaximize[kde=true], QPushButton#toolButtonMinimize[kde=tru QPushButton#toolButtonMain { border-right-width: 1px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 1px;} QPushButton#toolButtonMain[theme=light] { border-width: 1px; @@ -38,6 +39,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 1px; max-width: 50px; width: 50px; max-height: 35px; height: 35px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 1px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.5x.qss b/win-linux/res/styles/styles@1.5x.qss index 1b3834555..8ba57ba52 100644 --- a/win-linux/res/styles/styles@1.5x.qss +++ b/win-linux/res/styles/styles@1.5x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { /*font-size: 20px;*/ border-right-width: 2px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 2px;} QPushButton#toolButtonMain[theme=light] { border-width: 2px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 2px; max-width: 60px; width: 60px; max-height: 42px; height: 42px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 2px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@1.75x.qss b/win-linux/res/styles/styles@1.75x.qss index aa533bc6d..dea8aa8f7 100644 --- a/win-linux/res/styles/styles@1.75x.qss +++ b/win-linux/res/styles/styles@1.75x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { /*font-size: 20px;*/ border-right-width: 2px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 2px;} QPushButton#toolButtonMain[theme=light] { border-width: 2px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 2px; max-width: 70px; width: 70px; max-height: 49px; height: 49px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 2px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.25x.qss b/win-linux/res/styles/styles@2.25x.qss index a89bdd71e..e095236f3 100644 --- a/win-linux/res/styles/styles@2.25x.qss +++ b/win-linux/res/styles/styles@2.25x.qss @@ -11,11 +11,13 @@ QPushButton#toolButtonMaximize[kde=true], QPushButton#toolButtonMinimize[kde=tru QPushButton#toolButtonClose[kde=true] {padding: 5px 0px 15px;} QPushButton#toolButtonMain {font-size: 23px; border-right-width: 2px;} +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 2px;} QPushButton#toolButtonMain[theme=light] {border-width: 2px; border-bottom: 0 none;} QPushButton#toolButtonMain[class=normal], QPushButton#toolButtonMain[class=normal]:hover {border-bottom-width: 2px;} QPushButton#toolButtonDownload {border-right-width: 2px; max-width: 90px; width: 90px; max-height: 63px; height: 63px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 2px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.5x.qss b/win-linux/res/styles/styles@2.5x.qss index 1110c156f..ede78c8ef 100644 --- a/win-linux/res/styles/styles@2.5x.qss +++ b/win-linux/res/styles/styles@2.5x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 25px; border-right-width: 3px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 3px;} QPushButton#toolButtonMain[theme=light] { border-width: 3px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 3px; max-width: 100px; width: 100px; max-height: 70px; height: 70px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 3px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2.75x.qss b/win-linux/res/styles/styles@2.75x.qss index f713e1224..753f6d325 100644 --- a/win-linux/res/styles/styles@2.75x.qss +++ b/win-linux/res/styles/styles@2.75x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 28px; border-right-width: 3px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 3px;} QPushButton#toolButtonMain[theme=light] { border-width: 3px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 3px; max-width: 110px; width: 110px; max-height: 77px; height: 77px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 3px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@2x.qss b/win-linux/res/styles/styles@2x.qss index cc02d82c6..fe550d24b 100644 --- a/win-linux/res/styles/styles@2x.qss +++ b/win-linux/res/styles/styles@2x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 20px; border-right-width: 2px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 2px;} QPushButton#toolButtonMain[theme=light] { border-width: 2px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 2px; max-width: 80px; width: 80px; max-height: 56px; height: 56px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 2px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3.5x.qss b/win-linux/res/styles/styles@3.5x.qss index f4e625d8c..f5b63e7f4 100644 --- a/win-linux/res/styles/styles@3.5x.qss +++ b/win-linux/res/styles/styles@3.5x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 35px; border-right-width: 4px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 4px;} QPushButton#toolButtonMain[theme=light] { border-width: 4px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 4px; max-width: 140px; width: 140px; max-height: 98px; height: 98px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 4px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@3x.qss b/win-linux/res/styles/styles@3x.qss index e0a14f3d8..acdb42766 100644 --- a/win-linux/res/styles/styles@3x.qss +++ b/win-linux/res/styles/styles@3x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 30px; border-right-width: 3px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 3px;} QPushButton#toolButtonMain[theme=light] { border-width: 3px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 3px; max-width: 120px; width: 120px; max-height: 84px; height: 84px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 3px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4.5x.qss b/win-linux/res/styles/styles@4.5x.qss index aaf6f616c..084c739b1 100644 --- a/win-linux/res/styles/styles@4.5x.qss +++ b/win-linux/res/styles/styles@4.5x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 45px; border-right-width: 5px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 5px;} QPushButton#toolButtonMain[theme=light] { border-width: 5px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 5px; max-width: 180px; width: 180px; max-height: 126px; height: 126px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 5px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@4x.qss b/win-linux/res/styles/styles@4x.qss index 14c59fb86..0ed0d5fce 100644 --- a/win-linux/res/styles/styles@4x.qss +++ b/win-linux/res/styles/styles@4x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 40px; border-right-width: 4px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 4px;} QPushButton#toolButtonMain[theme=light] { border-width: 4px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 4px; max-width: 160px; width: 160px; max-height: 112px; height: 112px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 4px;} /* ToolTip*/ diff --git a/win-linux/res/styles/styles@5x.qss b/win-linux/res/styles/styles@5x.qss index 3ed528af6..3c3342768 100644 --- a/win-linux/res/styles/styles@5x.qss +++ b/win-linux/res/styles/styles@5x.qss @@ -26,6 +26,7 @@ QPushButton#toolButtonMain { font-size: 50px; border-right-width: 5px; } +#mainPanel[rtl=true] QPushButton#toolButtonMain {border-left-width: 5px;} QPushButton#toolButtonMain[theme=light] { border-width: 5px; @@ -39,6 +40,7 @@ QPushButton#toolButtonMain[class=normal], } QPushButton#toolButtonDownload {border-right-width: 5px; max-width: 200px; width: 200px; max-height: 140px; height: 140px;} +#mainPanel[rtl=true] QPushButton#toolButtonDownload {border-left-width: 5px;} /* ToolTip*/ diff --git a/win-linux/res/styles/tabbar.qss b/win-linux/res/styles/tabbar.qss index 69cee6372..e5ffd3987 100644 --- a/win-linux/res/styles/tabbar.qss +++ b/win-linux/res/styles/tabbar.qss @@ -16,10 +16,11 @@ CTabBar #tabScroll>#rightButton:disabled {image: url(:/tabbar/icons/scrolltab_rd CTabBar #tabScroll>#rightButton:hover {image: url(:/tabbar/icons/scrolltab_rh.svg);} CTabBar #tabScroll>#rightButton:pressed {image: url(:/tabbar/icons/scrolltab_rp.svg);} -Tab {background: #f1f1f1; border: none; border-right: 1px solid #dfdfdf; margin: 0px; padding: 0px;} +Tab {background: #f1f1f1; border: none; border-left: 0px; border-right: 1px solid #dfdfdf; margin: 0px; padding: 0px;} Tab #tabIcon {background: transparent;} Tab #tabText {background: transparent; font-family: "Arial", "Helvetica", "Helvetica Neue", sans-serif;} Tab #tabButton {border: none; margin-top: 0px; image: none; background: transparent;} +#mainPanel[rtl=true] Tab {border-right: 0px; border-left: 1px solid #dfdfdf;} Tab[selected=true] {background: #446995; border-color: #446995;} @@ -31,9 +32,11 @@ CTabBar[active=false] Tab[selected=true][hovered=true] {background: #cecece;} /* light */ #mainPanel[uitheme=theme-light] Tab {border-right-color: #dfdfdf;} +#mainPanel[uitheme=theme-light][rtl=true] Tab {border-left-color: #dfdfdf;} /* classic light */ #mainPanel[uitheme=theme-classic-light] Tab {border-right-color: #cbcbcb;} +#mainPanel[uitheme=theme-classic-light][rtl=true] Tab {border-left-color: #cbcbcb;} /* dark */ #mainPanel[uitheme=theme-dark] CTabBar {background: #404040;} @@ -45,6 +48,7 @@ CTabBar[active=false] Tab[selected=true][hovered=true] {background: #cecece;} #mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true] {background: #404040; border-color: #505050;} #mainPanel[uitheme=theme-dark] Tab[selected=false][hovered=true], #mainPanel[uitheme=theme-dark] CTabBar[active=false] Tab[selected=true][hovered=true] {background: #555;} +#mainPanel[uitheme=theme-dark][rtl=true] Tab {border-left-color: #505050;} /* contrast-dark */ #mainPanel[uitheme=theme-contrast-dark] CTabBar {background: #2a2a2a;} @@ -56,6 +60,7 @@ CTabBar[active=false] Tab[selected=true][hovered=true] {background: #cecece;} #mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true] {background: #2a2a2a; border-color: #414141;} #mainPanel[uitheme=theme-contrast-dark] Tab[selected=false][hovered=true], #mainPanel[uitheme=theme-contrast-dark] CTabBar[active=false] Tab[selected=true][hovered=true] {background: #424242;} +#mainPanel[uitheme=theme-contrast-dark][rtl=true] Tab {border-left-color: #414141;} /* portal */ @@ -109,6 +114,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="1.25x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 19px; min-height: 19px; max-width: 19px; max-height: 19px;} #mainPanel[zoom="1.25x"] Tab #tabText {font-size: 14px;} #mainPanel[zoom="1.25x"] Tab #tabButton {width: 20px; max-width: 20px; max-height: 20px; border-width: 2px;} +#mainPanel[zoom="1.25x"][rtl=true] Tab {border-left-width: 1px;} /* 1.5x */ #mainPanel[zoom="1.5x"] CTabBar #tabScroll {min-width: 48px; max-width: 48px;} @@ -117,6 +123,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="1.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 24px; min-height: 24px; max-width: 24px; max-height: 24px;} #mainPanel[zoom="1.5x"] Tab #tabText {font-size: 15px;} #mainPanel[zoom="1.5x"] Tab #tabButton {width: 24px; max-width: 24px; max-height: 24px; border-width: 2px;} +#mainPanel[zoom="1.5x"][rtl=true] Tab {border-left-width: 2px;} /* 1.75x */ #mainPanel[zoom="1.75x"] CTabBar #tabScroll {min-width: 64px; max-width: 64px;} @@ -125,6 +132,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="1.75x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 28px; min-height: 28px; max-width: 28px; max-height: 28px;} #mainPanel[zoom="1.75x"] Tab #tabText {font-size: 18px;} #mainPanel[zoom="1.75x"] Tab #tabButton {width: 28px; max-width: 28px; max-height: 28px; border-width: 2px;} +#mainPanel[zoom="1.75x"][rtl=true] Tab {border-left-width: 2px;} /* 2x */ #mainPanel[zoom="2x"] CTabBar #tabScroll {min-width: 64px; max-width: 64px;} @@ -133,6 +141,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="2x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 32px; min-height: 32px; max-width: 32px; max-height: 32px;} #mainPanel[zoom="2x"] Tab #tabText {font-size: 20px;} #mainPanel[zoom="2x"] Tab #tabButton {width: 32px; max-width: 32px; max-height: 32px; border-width: 2px;} +#mainPanel[zoom="2x"][rtl=true] Tab {border-left-width: 2px;} /* 2.25x */ #mainPanel[zoom="2.25x"] CTabBar #tabScroll {min-width: 72px; max-width: 72px;} @@ -141,6 +150,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="2.25x"] Tab #tabIcon {padding-left: 9px; padding-right: 9px; min-width: 36px; min-height: 36px; max-width: 36px; max-height: 36px;} #mainPanel[zoom="2.25x"] Tab #tabText {font-size: 23px;} #mainPanel[zoom="2.25x"] Tab #tabButton {width: 36px; max-width: 36px; max-height: 36px; border-width: 2px;} +#mainPanel[zoom="2.25x"][rtl=true] Tab {border-left-width: 2px;} /* 2.5x */ #mainPanel[zoom="2.5x"] CTabBar #tabScroll {min-width: 80px; max-width: 80px;} @@ -149,6 +159,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="2.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 40px; min-height: 40px; max-width: 40px; max-height: 40px;} #mainPanel[zoom="2.5x"] Tab #tabText {font-size: 25px;} #mainPanel[zoom="2.5x"] Tab #tabButton {width: 40px; max-width: 40px; max-height: 40px; border-width: 2px;} +#mainPanel[zoom="2.5x"][rtl=true] Tab {border-left-width: 3px;} /* 2.75x */ #mainPanel[zoom="2.75x"] CTabBar #tabScroll {min-width: 88px; max-width: 88px;} @@ -157,6 +168,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="2.75x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 44px; min-height: 44px; max-width: 44px; max-height: 44px;} #mainPanel[zoom="2.75x"] Tab #tabText {font-size: 28px;} #mainPanel[zoom="2.75x"] Tab #tabButton {width: 44px; max-width: 44px; max-height: 44px; border-width: 2px;} +#mainPanel[zoom="2.75x"][rtl=true] Tab {border-left-width: 3px;} /* 3x */ #mainPanel[zoom="3x"] CTabBar #tabScroll {min-width: 96px; max-width: 96px;} @@ -165,6 +177,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="3x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 48px; min-height: 48px; max-width: 48px; max-height: 48px;} #mainPanel[zoom="3x"] Tab #tabText {font-size: 30px;} #mainPanel[zoom="3x"] Tab #tabButton {width: 48px; max-width: 48px; max-height: 48px; border-width: 2px;} +#mainPanel[zoom="3x"][rtl=true] Tab {border-left-width: 3px;} /* 3.5x */ #mainPanel[zoom="3.5x"] CTabBar #tabScroll {min-width: 112px; max-width: 112px;} @@ -173,6 +186,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="3.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 56px; min-height: 56px; max-width: 56px; max-height: 56px;} #mainPanel[zoom="3.5x"] Tab #tabText {font-size: 35px;} #mainPanel[zoom="3.5x"] Tab #tabButton {width: 56px; max-width: 56px; max-height: 56px; border-width: 2px;} +#mainPanel[zoom="3.5x"][rtl=true] Tab {border-left-width: 4px;} /* 4x */ #mainPanel[zoom="4x"] CTabBar #tabScroll {min-width: 128px; max-width: 128px;} @@ -181,6 +195,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="4x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 64px; min-height: 64px; max-width: 64px; max-height: 64px;} #mainPanel[zoom="4x"] Tab #tabText {font-size: 40px;} #mainPanel[zoom="4x"] Tab #tabButton {width: 64px; max-width: 64px; max-height: 64px; border-width: 2px;} +#mainPanel[zoom="4x"][rtl=true] Tab {border-left-width: 4px;} /* 4.5x */ #mainPanel[zoom="4.5x"] CTabBar #tabScroll {min-width: 144px; max-width: 144px;} @@ -189,6 +204,7 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="4.5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 72px; min-height: 72px; max-width: 72px; max-height: 72px;} #mainPanel[zoom="4.5x"] Tab #tabText {font-size: 45px;} #mainPanel[zoom="4.5x"] Tab #tabButton {width: 72px; max-width: 72px; max-height: 72px; border-width: 2px;} +#mainPanel[zoom="4.5x"][rtl=true] Tab {border-left-width: 5px;} /* 5x */ #mainPanel[zoom="5x"] CTabBar #tabScroll {min-width: 160px; max-width: 160px;} @@ -197,3 +213,4 @@ Tab #tabButton {width: 16px; max-width: 16px; max-height: 16px; border-width: 2p #mainPanel[zoom="5x"] Tab #tabIcon {padding-left: 8px; padding-right: 8px; min-width: 80px; min-height: 80px; max-width: 80px; max-height: 80px;} #mainPanel[zoom="5x"] Tab #tabText {font-size: 50px;} #mainPanel[zoom="5x"] Tab #tabButton {width: 80px; max-width: 80px; max-height: 80px; border-width: 2px;} +#mainPanel[zoom="5x"][rtl=true] Tab {border-left-width: 5px;} diff --git a/win-linux/src/cascapplicationmanagerwrapper.cpp b/win-linux/src/cascapplicationmanagerwrapper.cpp index 65b994136..f0afb40c8 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.cpp +++ b/win-linux/src/cascapplicationmanagerwrapper.cpp @@ -54,6 +54,8 @@ using namespace std; using namespace std::placeholders; +bool CAscApplicationManagerWrapper::m_rtlEnabled = false; + CAscApplicationManagerWrapper::CAscApplicationManagerWrapper(CAscApplicationManagerWrapper const&) { @@ -1159,6 +1161,11 @@ void CAscApplicationManagerWrapper::initializeApp() if ( !local_themes_array.isEmpty() ) EditorJSVariables::setVariable("localthemes", local_themes_array); + const bool _is_rtl = reg_user.contains("forcedRtl") ? reg_user.value("forcedRtl", false).toBool() : + CLangater::isRtlLanguage(CLangater::getCurrentLangCode()); + AscAppManager::setRtlEnabled(_is_rtl); + EditorJSVariables::setVariable("rtl", _is_rtl ? "yes" : "no"); + EditorJSVariables::setVariable("lang", CLangater::getCurrentLangCode()); EditorJSVariables::applyVariable("theme", { {"type", _app.m_themes->current().stype()}, @@ -1637,6 +1644,28 @@ bool CAscApplicationManagerWrapper::event(QEvent *event) return QObject::event(event); } +void CAscApplicationManagerWrapper::setRtlEnabled(bool state) +{ + if (m_rtlEnabled != state) { + m_rtlEnabled = state; + Qt::LayoutDirection direct = m_rtlEnabled ? Qt::RightToLeft : Qt::LeftToRight; + APP_CAST(_app); + if (_app.m_pMainWindow) + _app.m_pMainWindow->setLayoutDirection(direct); + for (auto const &r : _app.m_winsReporter) + r.second->setLayoutDirection(direct); + for (auto const &e : _app.m_vecEditors) { + CEditorWindow *editor = reinterpret_cast(e); + editor->setLayoutDirection(direct); + } + } +} + +bool CAscApplicationManagerWrapper::isRtlEnabled() +{ + return m_rtlEnabled; +} + bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) { QJsonParseError jerror; @@ -1691,6 +1720,16 @@ bool CAscApplicationManagerWrapper::applySettings(const wstring& wstrjson) setUserSettings(L"spell-check-input-mode", objRoot["spellcheckdetect"].toString() == "off" ? L"0" : L"default"); } + if ( objRoot.contains("rtl") ) { + _reg_user.setValue("forcedRtl", objRoot["rtl"].toBool(false)); + + /* + * show message and relaunch app + */ + } else { + _reg_user.remove("forcedRtl"); + } + wstring params = QString("lang=%1&username=%3&location=%2") .arg(_lang_id, Utils::systemLocationCode(), QUrl::toPercentEncoding(_user_newname)).toStdWString(); diff --git a/win-linux/src/cascapplicationmanagerwrapper.h b/win-linux/src/cascapplicationmanagerwrapper.h index 3e6fa2788..92d52e884 100644 --- a/win-linux/src/cascapplicationmanagerwrapper.h +++ b/win-linux/src/cascapplicationmanagerwrapper.h @@ -120,6 +120,7 @@ class CAscApplicationManagerWrapper : public QObject, public QAscApplicationMana CMainWindow * m_pMainWindow = nullptr; std::shared_ptr m_themes; + static bool m_rtlEnabled; public: CWindowsQueue& closeQueue(); @@ -201,6 +202,8 @@ private slots: static void closeAppWindows(); // TODO: combine with launchAppClose static void cancelClose(); + static void setRtlEnabled(bool); + static bool isRtlEnabled(); uint logoutCount(const std::wstring& portal) const; void Logout(const std::wstring& portal); diff --git a/win-linux/src/clangater.cpp b/win-linux/src/clangater.cpp index df22f9122..5af1d363b 100644 --- a/win-linux/src/clangater.cpp +++ b/win-linux/src/clangater.cpp @@ -305,3 +305,8 @@ void CLangater::addTranslation(const QString& dir) { addTranslation(dir, getInstance()->m_lang); } + +bool CLangater::isRtlLanguage(const QString &lang) { + QLocale loc = lang.isEmpty() ? QLocale::system() : QLocale(lang); + return loc.textDirection() == Qt::LayoutDirection::RightToLeft; +} diff --git a/win-linux/src/clangater.h b/win-linux/src/clangater.h index b44de8b66..5e7eea7cf 100644 --- a/win-linux/src/clangater.h +++ b/win-linux/src/clangater.h @@ -20,6 +20,7 @@ class CLangater : public QObject static QString getLangName(const QString& code = QString()); static void addTranslation(const QString& dir, const QString& name); static void addTranslation(const QString& dir); + static bool isRtlLanguage(const QString &lang = QString()); static QJsonObject availableLangsToJson(); diff --git a/win-linux/src/components/asctabwidget.cpp b/win-linux/src/components/asctabwidget.cpp index 19a41fdaa..fd7f7be6e 100644 --- a/win-linux/src/components/asctabwidget.cpp +++ b/win-linux/src/components/asctabwidget.cpp @@ -187,6 +187,23 @@ CAscTabWidget::CAscTabWidget(QWidget *parent, CTabBar *_pBar) removeWidget(wgt); insertWidget(to, wgt); }); + QObject::connect(m_pBar, &CTabBar::tabsSwapped, this, [=](int from, int to) { + if (from == to || !indexIsValid(from) || !indexIsValid(to)) + return; + auto wgt_from = widget(from); + auto wgt_to = widget(to); + blockSignals(true); + removeWidget(wgt_from); + removeWidget(wgt_to); + insertWidget(from < to ? from : to, from < to ? wgt_to : wgt_from); + insertWidget(from < to ? to : from, from < to ? wgt_from : wgt_to); + if (from == m_pBar->currentIndex()) + QStackedWidget::setCurrentIndex(to); + else + if (to == m_pBar->currentIndex()) + QStackedWidget::setCurrentIndex(from); + blockSignals(false); + }); } CTabPanel * CAscTabWidget::panel(int index) const @@ -220,7 +237,7 @@ int CAscTabWidget::addEditor(const COpenOptions& opts) pView->initAsEditor(); - int tab_index = -1; + int tab_index = AscAppManager::isRtlEnabled() ? 0 : -1; bool res_open = true; if (opts.srctype == etLocalFile) { pView->openLocalFile(opts.wurl, file_format, L""); @@ -247,8 +264,8 @@ int CAscTabWidget::addEditor(const COpenOptions& opts) data->setChanged(opts.srctype == etRecoveryFile); pView->setData(data); - tab_index = addWidget(panelwidget); - m_pBar->addTab(data->title()); + tab_index = insertWidget(tab_index, panelwidget); + m_pBar->insertTab(tab_index, data->title()); m_pBar->setTabToolTip(tab_index, data->title()); m_pBar->tabStartLoading(tab_index); @@ -367,7 +384,7 @@ int CAscTabWidget::addPortal(const QString& url, const QString& name, const QStr data->setUrl(_url); pView->setData(data); - int tab_index = -1; + int tab_index = AscAppManager::isRtlEnabled() ? 0 : -1; tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, portal); @@ -408,7 +425,7 @@ int CAscTabWidget::addOAuthPortal(const QString& portal, const QString& type, co data->setUrl(portal); pView->setData(data); - int tab_index = -1; + int tab_index = AscAppManager::isRtlEnabled() ? 0 : -1; tab_index = insertWidget(tab_index, panelwidget); m_pBar->insertTab(tab_index, _portal); @@ -423,7 +440,7 @@ int CAscTabWidget::addOAuthPortal(const QString& portal, const QString& type, co int CAscTabWidget::insertPanel(QWidget * panel, int index) { - int tabindex = -1; + int tabindex = AscAppManager::isRtlEnabled() ? 0 : -1; CTabPanel * _panel = dynamic_cast(panel); Q_ASSERT(_panel != nullptr); @@ -432,6 +449,8 @@ int CAscTabWidget::insertPanel(QWidget * panel, int index) QWidget * panelwidget = createTabPanel(this, _panel); + if (index < 0 && AscAppManager::isRtlEnabled()) + index = 0; tabindex = insertWidget(index, panelwidget); m_pBar->insertTab(tabindex, tabdata->title()); m_pBar->setTabToolTip(tabindex, tabdata->title()); diff --git a/win-linux/src/components/cdownloadwidget.cpp b/win-linux/src/components/cdownloadwidget.cpp index 8a96dcde6..0825342e2 100644 --- a/win-linux/src/components/cdownloadwidget.cpp +++ b/win-linux/src/components/cdownloadwidget.cpp @@ -171,6 +171,7 @@ CDownloadWidget::CDownloadWidget(QWidget *parent) QLabel *labelTitle = new QLabel(m_titleFrame); labelTitle->setObjectName("labelTitle"); labelTitle->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + labelTitle->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); labelTitle->setText(tr("Downloads")); m_titleFrame->layout()->addWidget(labelTitle); @@ -210,8 +211,10 @@ CDownloadWidget::CDownloadWidget(QWidget *parent) connect(m_pToolButton, &QPushButton::clicked, this, [=]() { polish(); show(); - QPoint offset(-1 * MAIN_WINDOW_BORDER_WIDTH * m_dpiRatio, (TITLE_HEIGHT + MAIN_WINDOW_BORDER_WIDTH) * m_dpiRatio); - QPoint pos = parent->geometry().topRight() - QPoint(WIDGET_MAX_WIDTH, 0) + offset + QPoint(qRound(SHADOW - MARGINS/3), qRound(-SHADOW + MARGINS/3)); + QPoint pos = AscAppManager::isRtlEnabled() ? parent->geometry().topLeft() : parent->geometry().topRight() - QPoint(WIDGET_MAX_WIDTH, 0); + QPoint brd_offset((AscAppManager::isRtlEnabled() ? 1 : -1) * MAIN_WINDOW_BORDER_WIDTH * m_dpiRatio, (TITLE_HEIGHT + MAIN_WINDOW_BORDER_WIDTH) * m_dpiRatio); + QPoint shd_offset((AscAppManager::isRtlEnabled() ? -1 : 1) * qRound(SHADOW - MARGINS/3), qRound(-SHADOW + MARGINS/3)); + pos += brd_offset + shd_offset; move(pos); int prefHeight = m_mapDownloads.size() * ITEM_MAX_HEIGHT + 74 * m_dpiRatio; setGeometry(QRect(pos, QSize(WIDGET_MAX_WIDTH, (prefHeight > WIDGET_MAX_HEIGHT) ? WIDGET_MAX_HEIGHT : prefHeight))); @@ -248,6 +251,7 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id) CElipsisLabel * name = new CElipsisLabel(fn); name->setObjectName("labelName"); name->setEllipsisMode(Qt::ElideRight); + name->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); name->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); grid->addWidget(name, 0, 0, 1, 1); @@ -273,6 +277,7 @@ QWidget * CDownloadWidget::addFile(const QString& fn, int id) CElipsisLabel * info = new CElipsisLabel(QString("0 %1").arg(tr("kBps"))); info->setObjectName("labelInfo"); info->setEllipsisMode(Qt::ElideRight); + info->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); info->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); grid->addWidget(info, 2, 0, 1, 2); @@ -325,6 +330,7 @@ void CDownloadWidget::downloadProcess(void * info) } QLabel *size_label = new QLabel; size_label->setObjectName("labelSize"); + size_label->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); size_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); size_label->setText(getFileSize(QString::fromStdWString(pData->get_FilePath()))); lut->addWidget(size_label, 1, 0, 1, 2); @@ -505,6 +511,22 @@ void CDownloadWidget::applyTheme(const QString &theme) polish(); } +void CDownloadWidget::onLayoutDirectionChanged() +{ + setLayoutDirection(AscAppManager::isRtlEnabled() ? Qt::RightToLeft : Qt::LeftToRight); + if (QLabel *labelTitle = m_titleFrame->findChild("labelTitle")) + labelTitle->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); + for (int i = 0; i < m_pContentArea->layout()->count(); ++i) { + auto item = m_pContentArea->layout()->itemAt(i); + if (item && item->widget()) { + const auto lb_list = item->widget()->findChildren(); + for (QLabel *lb : lb_list) { + lb->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignAbsolute); + } + } + } +} + void CDownloadWidget::onStart() { if (!m_pToolButton->isVisible()) diff --git a/win-linux/src/components/cdownloadwidget.h b/win-linux/src/components/cdownloadwidget.h index 97ce4ae2a..4737f8ce4 100644 --- a/win-linux/src/components/cdownloadwidget.h +++ b/win-linux/src/components/cdownloadwidget.h @@ -52,6 +52,7 @@ class CDownloadWidget : public QWidget QPushButton * toolButton(); void updateScalingFactor(double); void applyTheme(const QString&); + void onLayoutDirectionChanged(); protected: virtual void closeEvent(QCloseEvent *) final; diff --git a/win-linux/src/components/celipsislabel.cpp b/win-linux/src/components/celipsislabel.cpp index 05f31704c..1587aad29 100644 --- a/win-linux/src/components/celipsislabel.cpp +++ b/win-linux/src/components/celipsislabel.cpp @@ -85,6 +85,18 @@ auto CElipsisLabel::setEllipsisMode(Qt::TextElideMode mode) -> void elide_mode = mode; } +auto CElipsisLabel::textWidth() -> int +{ + QString elt = ellipsis_text_(this, orig_text, elide_mode); + QFontMetrics fm(font()); +#if (QT_VERSION < QT_VERSION_CHECK(5,11,0)) + int textWidth = fm.width(elt); +#else + int textWidth = fm.horizontalAdvance(elt); +#endif + return textWidth; +} + auto CElipsisLabel::updateText() -> void { QString elt = ellipsis_text_(this, orig_text, elide_mode); diff --git a/win-linux/src/components/celipsislabel.h b/win-linux/src/components/celipsislabel.h index a3ff8df8a..01483365d 100644 --- a/win-linux/src/components/celipsislabel.h +++ b/win-linux/src/components/celipsislabel.h @@ -46,6 +46,7 @@ class CElipsisLabel : public QLabel auto setText(const QString&) -> void; auto setEllipsisMode(Qt::TextElideMode) -> void; auto updateText() -> void; + auto textWidth() -> int; signals: void onResize(QSize size, int textWidth); diff --git a/win-linux/src/components/ctabbar.cpp b/win-linux/src/components/ctabbar.cpp index 40a0856c4..a987a3479 100644 --- a/win-linux/src/components/ctabbar.cpp +++ b/win-linux/src/components/ctabbar.cpp @@ -122,6 +122,7 @@ Tab::Tab(QWidget *parent) : text_label = new QLabel(this); text_label->setObjectName("tabText"); + text_label->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignVCenter | Qt::AlignAbsolute); text_label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); lut->addWidget(text_label); @@ -472,6 +473,8 @@ void CTabBar::CTabBarPrivate::slide(int from, int to, int offset, int animation_ void CTabBar::CTabBarPrivate::scrollToDirection(int direction) { + if (AscAppManager::isRtlEnabled()) + direction = (direction == Direction::Left) ? Direction::Right : Direction::Left; while (animationInProgress) PROCESSEVENTS(); @@ -559,7 +562,10 @@ void CTabBar::CTabBarPrivate::changeScrollerState() break; } } - leftButton->setEnabled(allowScroll); + if (AscAppManager::isRtlEnabled()) + rightButton->setEnabled(allowScroll); + else + leftButton->setEnabled(allowScroll); allowScroll = false; for (int i = 0; i < tabList.size(); i++) { @@ -568,7 +574,10 @@ void CTabBar::CTabBarPrivate::changeScrollerState() break; } } - rightButton->setEnabled(allowScroll); + if (AscAppManager::isRtlEnabled()) + leftButton->setEnabled(allowScroll); + else + rightButton->setEnabled(allowScroll); } void CTabBar::CTabBarPrivate::reorderIndexes() @@ -624,8 +633,8 @@ CTabBar::CTabBar(QWidget *parent) : d->leftButton = new QToolButton(d->scrollFrame); d->rightButton = new QToolButton(d->scrollFrame); - d->leftButton->setObjectName("leftButton"); - d->rightButton->setObjectName("rightButton"); + d->leftButton->setObjectName(AscAppManager::isRtlEnabled() ? "rightButton" : "leftButton"); + d->rightButton->setObjectName(AscAppManager::isRtlEnabled() ? "leftButton" : "rightButton"); scrollLayout->addWidget(d->leftButton); scrollLayout->addWidget(d->rightButton); @@ -723,6 +732,27 @@ int CTabBar::insertTab(int index, const QIcon &icon, const QString &text) return actual_index; } +void CTabBar::swapTabs(int from, int to) +{ + while (d->animationInProgress) + PROCESSEVENTS(); + if (from == to || !d->indexIsValid(from) || !d->indexIsValid(to)) + return; + int posX = d->_tabRect(from).x(); + d->tabList[from]->move(d->_tabRect(to).x(), 0); + d->tabList[to]->move(posX, 0); + int from_index = d->tabIndex(from); + d->tabIndex(from) = d->tabIndex(to); + d->tabIndex(to) = from_index; + std::swap(d->tabList[from], d->tabList[to]); + emit tabsSwapped(from, to); + if (from == d->currentIndex) + d->onCurrentChanged(to); + else + if (to == d->currentIndex) + d->onCurrentChanged(from); +} + void CTabBar::removeTab(int index) { while (d->animationInProgress) @@ -1076,7 +1106,8 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) } } } - if (!d->tabArea->rect().contains(me->pos()) && d->tabArea->rect().right() >= me->x()) { + bool undockDirectionIsValid = AscAppManager::isRtlEnabled() ? d->tabArea->rect().left() <= me->x() : d->tabArea->rect().right() >= me->x(); + if (!d->tabArea->rect().contains(me->pos()) && undockDirectionIsValid) { if (d->currentIndex != d->movedTabIndex) d->reorderIndexes(); bool accepted = false; @@ -1185,6 +1216,22 @@ bool CTabBar::eventFilter(QObject *watched, QEvent *event) case QEvent::Leave: QApplication::postEvent(d->tabArea, new QMouseEvent(QEvent::MouseButtonRelease, QCursor::pos(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier)); break; + case QEvent::LayoutDirectionChange: { + SKIP_EVENTS_QUEUE([=]() { + for (int i = 0; i < d->tabList.size(); i++) { + d->tabList[i]->polish(); + d->tabList[i]->text_label->setAlignment((AscAppManager::isRtlEnabled() ? Qt::AlignRight : Qt::AlignLeft) | Qt::AlignVCenter | Qt::AlignAbsolute); + } + d->leftButton->setObjectName(AscAppManager::isRtlEnabled() ? "rightButton" : "leftButton"); + d->rightButton->setObjectName(AscAppManager::isRtlEnabled() ? "leftButton" : "rightButton"); + d->leftButton->style()->polish(d->leftButton); + d->rightButton->style()->polish(d->rightButton); + int n = count(); + for (int i = 0; i < n/2; i++) + swapTabs(i, n - i - 1); + }); + break; + } default: break; } diff --git a/win-linux/src/components/ctabbar.h b/win-linux/src/components/ctabbar.h index d2960feae..82e9e8347 100644 --- a/win-linux/src/components/ctabbar.h +++ b/win-linux/src/components/ctabbar.h @@ -56,7 +56,7 @@ class CTabBar : public QFrame QSize iconSize() const; int insertTab(int index, const QString &text); int insertTab(int index, const QIcon &icon, const QString &text); -// void moveTab(int from, int to); + void swapTabs(int from, int to); void removeTab(int index); void setElideMode(Qt::TextElideMode mode); void setIconSize(const QSize &size); @@ -92,6 +92,7 @@ class CTabBar : public QFrame // void tabBarDoubleClicked(int index); void tabCloseRequested(int index); void tabMoved(int from, int to); + void tabsSwapped(int from, int to); void tabUndock(int index, bool &accepted); protected: diff --git a/win-linux/src/platform_linux/gtkfilechooser.cpp b/win-linux/src/platform_linux/gtkfilechooser.cpp index f268233c0..39eef5e92 100755 --- a/win-linux/src/platform_linux/gtkfilechooser.cpp +++ b/win-linux/src/platform_linux/gtkfilechooser.cpp @@ -3,6 +3,7 @@ #include #include "gtkutils.h" #include "gtkfilechooser.h" +#include "cascapplicationmanagerwrapper.h" #include @@ -82,6 +83,9 @@ static void nativeFileDialog(const Window &parent_xid, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER }; + + if (AscAppManager::isRtlEnabled()) + gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); GtkWidget *dialog = NULL; dialog = gtk_file_chooser_dialog_new(title, NULL, diff --git a/win-linux/src/platform_linux/gtkmessage.cpp b/win-linux/src/platform_linux/gtkmessage.cpp index 65d1642ef..7af2bd360 100644 --- a/win-linux/src/platform_linux/gtkmessage.cpp +++ b/win-linux/src/platform_linux/gtkmessage.cpp @@ -36,6 +36,7 @@ #include #include #include "gtkmessage.h" +#include "cascapplicationmanagerwrapper.h" #include @@ -84,6 +85,8 @@ int GtkMsg::showMessage(QWidget *parent, GtkDialogFlags flags; flags = (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); + if (AscAppManager::isRtlEnabled()) + gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); GtkWidget *dialog = NULL; dialog = gtk_message_dialog_new(NULL, flags, diff --git a/win-linux/src/platform_linux/gtkprintdialog.cpp b/win-linux/src/platform_linux/gtkprintdialog.cpp index 27bd99c1a..c58527d4a 100644 --- a/win-linux/src/platform_linux/gtkprintdialog.cpp +++ b/win-linux/src/platform_linux/gtkprintdialog.cpp @@ -3,6 +3,7 @@ #include "gtkutils.h" #include "gtkprintdialog.h" #include "components/cmessage.h" +#include "cascapplicationmanagerwrapper.h" #include #include #include @@ -369,6 +370,8 @@ QDialog::DialogCode GtkPrintDialog::exec() } // Init dialog + if (AscAppManager::isRtlEnabled()) + gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); GtkWidget *dialog; dialog = gtk_print_unix_dialog_new(m_title.toUtf8().data(), NULL); gtk_window_set_type_hint(GTK_WINDOW(dialog), GDK_WINDOW_TYPE_HINT_DIALOG); diff --git a/win-linux/src/platform_linux/updatedialog.cpp b/win-linux/src/platform_linux/updatedialog.cpp index 157d687da..ce06f3cfb 100644 --- a/win-linux/src/platform_linux/updatedialog.cpp +++ b/win-linux/src/platform_linux/updatedialog.cpp @@ -36,6 +36,7 @@ #include "utils.h" #include #include "updatedialog.h" +#include "cascapplicationmanagerwrapper.h" #include //extern "C" { //#include "gtk_resources.h" @@ -77,6 +78,9 @@ int WinDlg::showDialog(QWidget *parent, gtk_init(NULL, NULL); GtkDialogFlags flags; flags = (GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT); + + if (AscAppManager::isRtlEnabled()) + gtk_widget_set_default_direction(GTK_TEXT_DIR_RTL); GtkWidget *dialog = NULL; dialog = gtk_message_dialog_new(NULL, flags, diff --git a/win-linux/src/platform_win/message.cpp b/win-linux/src/platform_win/message.cpp index 4099ecd99..c506d09c2 100644 --- a/win-linux/src/platform_win/message.cpp +++ b/win-linux/src/platform_win/message.cpp @@ -33,6 +33,7 @@ #include #include "message.h" #include "utils.h" +#include "cascapplicationmanagerwrapper.h" #include #include #include @@ -172,6 +173,8 @@ int WinMsg::showMessage(QWidget *parent, config.dwFlags = TDF_POSITION_RELATIVE_TO_WINDOW | TDF_ALLOW_DIALOG_CANCELLATION | TDF_SIZE_TO_CONTENT; + if (AscAppManager::isRtlEnabled()) + config.dwFlags |= TDF_RTL_LAYOUT; config.hwndParent = parent_hwnd; config.hInstance = GetModuleHandle(NULL); config.pfCallback = (PFTASKDIALOGCALLBACK)Pftaskdialogcallback; diff --git a/win-linux/src/platform_win/updatedialog.cpp b/win-linux/src/platform_win/updatedialog.cpp index 95cb34770..f1fd3d0db 100644 --- a/win-linux/src/platform_win/updatedialog.cpp +++ b/win-linux/src/platform_win/updatedialog.cpp @@ -33,6 +33,7 @@ #include #include "updatedialog.h" #include "platform_win/resource.h" +#include "cascapplicationmanagerwrapper.h" #include "defines.h" #include "utils.h" #include @@ -152,6 +153,8 @@ int WinDlg::showDialog(QWidget *parent, config.dwFlags = TDF_ENABLE_HYPERLINKS | TDF_POSITION_RELATIVE_TO_WINDOW | TDF_ALLOW_DIALOG_CANCELLATION; + if (AscAppManager::isRtlEnabled()) + config.dwFlags |= TDF_RTL_LAYOUT; config.hwndParent = parent_hwnd; config.hInstance = GetModuleHandle(NULL); config.pfCallback = (PFTASKDIALOGCALLBACK)Pftaskdialogcallback; diff --git a/win-linux/src/prop/cmainwindowimpl.cpp b/win-linux/src/prop/cmainwindowimpl.cpp index 72be32811..a46dddb63 100644 --- a/win-linux/src/prop/cmainwindowimpl.cpp +++ b/win-linux/src/prop/cmainwindowimpl.cpp @@ -94,6 +94,8 @@ void CMainWindowImpl::refreshAboutVersion() GET_REGISTRY_USER(reg_user); _json_obj["editorwindowmode"] = reg_user.value("editorWindowMode",false).toBool(); + _json_obj["rtl"] = reg_user.contains("forcedRtl") ? reg_user.value("forcedRtl", false).toBool() : + CLangater::isRtlLanguage(CLangater::getCurrentLangCode()); // Read update settings #ifdef _UPDMODULE diff --git a/win-linux/src/windows/ceditorwindow.cpp b/win-linux/src/windows/ceditorwindow.cpp index dae313f86..21270b6b7 100644 --- a/win-linux/src/windows/ceditorwindow.cpp +++ b/win-linux/src/windows/ceditorwindow.cpp @@ -457,3 +457,8 @@ void CEditorWindow::closeEvent(QCloseEvent * e) AscAppManager::getInstance().closeQueue().enter(sWinTag{CLOSE_QUEUE_WIN_TYPE_EDITOR, size_t(this)}); e->ignore(); } + +void CEditorWindow::onLayoutDirectionChanged() +{ + d_ptr->onLayoutDirectionChanged(); +} diff --git a/win-linux/src/windows/ceditorwindow.h b/win-linux/src/windows/ceditorwindow.h index f1b7d93a9..8a5a883d2 100644 --- a/win-linux/src/windows/ceditorwindow.h +++ b/win-linux/src/windows/ceditorwindow.h @@ -67,6 +67,7 @@ class CEditorWindow : public CWindowPlatform protected: void closeEvent(QCloseEvent *) override; + virtual void onLayoutDirectionChanged() final; private: QWidget * createMainPanel(QWidget *, const QString&); diff --git a/win-linux/src/windows/ceditorwindow_p.h b/win-linux/src/windows/ceditorwindow_p.h index ee5be227f..c2e0026fc 100644 --- a/win-linux/src/windows/ceditorwindow_p.h +++ b/win-linux/src/windows/ceditorwindow_p.h @@ -66,6 +66,7 @@ #define TOP_PANEL_OFFSET 6*TOOLBTN_WIDTH #define ICON_SPACER_WIDTH 9 #define ICON_SIZE QSize(20,20) +#define MARGINS 6 using namespace NSEditorApi; @@ -219,10 +220,36 @@ class CEditorWindowPrivate : public CCefEventsGate } } QMargins mrg(0, 0, 0, 2*dpiRatio); - diffW > 0 ? mrg.setRight(diffW) : mrg.setLeft(-diffW); + if (AscAppManager::isRtlEnabled()) + diffW > 0 ? mrg.setLeft(diffW) : mrg.setRight(-diffW); + else + diffW > 0 ? mrg.setRight(diffW) : mrg.setLeft(-diffW); boxtitlelabel->setContentsMargins(mrg); } + auto onLayoutDirectionChanged()->void + { + if (boxtitlelabel) { + QMargins mrg = boxtitlelabel->contentsMargins(); + if (AscAppManager::isRtlEnabled()) { + mrg.setLeft(mrg.right()); + mrg.setRight(0); + } else { + mrg.setRight(mrg.left()); + mrg.setLeft(0); + } + boxtitlelabel->setContentsMargins(mrg); + } + if (iconcrypted) { + QSize size = window->m_labelTitle->size(); + int offset = window->m_labelTitle->textWidth()/2 + MARGINS * window->m_dpiRatio; + int x = size.width()/2; + x += AscAppManager::isRtlEnabled() ? offset : -offset - ICON_SIZE.width() * window->m_dpiRatio; + int y = (size.height() - ICON_SIZE.height() * window->m_dpiRatio)/2; + iconcrypted->move(x, y); + } + } + void onEditorConfig(int, std::wstring cfg) override { // if ( id == window->holdView(id) ) @@ -752,7 +779,9 @@ class CEditorWindowPrivate : public CCefEventsGate iconcrypted->move(0, y); connect(window->m_labelTitle, &CElipsisLabel::onResize, this, [=](QSize size, int textWidth) { if (iconcrypted) { - int x = (size.width() - textWidth)/2 - ((ICON_SIZE.width() + 6) * window->m_dpiRatio); + int offset = textWidth/2 + MARGINS * window->m_dpiRatio; + int x = size.width()/2; + x += AscAppManager::isRtlEnabled() ? offset : -offset - ICON_SIZE.width() * window->m_dpiRatio; int y = (size.height() - ICON_SIZE.height() * window->m_dpiRatio)/2; iconcrypted->move(x, y); } diff --git a/win-linux/src/windows/cmainwindow.cpp b/win-linux/src/windows/cmainwindow.cpp index c509c1b90..525c9ed02 100644 --- a/win-linux/src/windows/cmainwindow.cpp +++ b/win-linux/src/windows/cmainwindow.cpp @@ -147,6 +147,8 @@ int CMainWindow::attachEditor(QWidget * panel, int index) int CMainWindow::attachEditor(QWidget * panel, const QPoint& pt) { QPoint _pt_local = tabWidget()->tabBar()->mapFromGlobal(pt); + if (AscAppManager::isRtlEnabled()) + _pt_local -= QPoint(32 * m_dpiRatio, 0); // Minus tabScroll width #ifdef Q_OS_WIN # if (QT_VERSION < QT_VERSION_CHECK(5, 10, 0)) QPoint _tl = windowRect().topLeft(); @@ -176,7 +178,9 @@ bool CMainWindow::pointInTabs(const QPoint& pt) { QRect _rc_title(m_pMainPanel->geometry()); _rc_title.setHeight(tabWidget()->tabBar()->height()); - _rc_title.adjust(m_pButtonMain->width(), 1, -3*int(TITLEBTN_WIDTH*m_dpiRatio), 0); + int dx1 = (AscAppManager::isRtlEnabled()) ? 3 * int(TITLEBTN_WIDTH * m_dpiRatio) : m_pButtonMain->width(); + int dx2 = (AscAppManager::isRtlEnabled()) ? -1 * m_pButtonMain->width() : -3 * int(TITLEBTN_WIDTH * m_dpiRatio); + _rc_title.adjust(dx1, 1, dx2, 0); return _rc_title.contains(mapFromGlobal(pt)); } @@ -367,6 +371,7 @@ QWidget* CMainWindow::createMainPanel(QWidget *parent) { QWidget *mainPanel = new QWidget(parent); mainPanel->setObjectName("mainPanel"); + mainPanel->setProperty("rtl", AscAppManager::isRtlEnabled()); QGridLayout *_pMainGridLayout = new QGridLayout(mainPanel); _pMainGridLayout->setSpacing(0); _pMainGridLayout->setObjectName(QString::fromUtf8("mainGridLayout")); @@ -999,6 +1004,7 @@ void CMainWindow::onDocumentDownload(void * info) }); QHBoxLayout * layoutBtns = qobject_cast(m_boxTitleBtns->layout()); layoutBtns->insertWidget(1, m_pWidgetDownload->toolButton()); + m_pWidgetDownload->setLayoutDirection(AscAppManager::isRtlEnabled() ? Qt::RightToLeft : Qt::LeftToRight); m_pWidgetDownload->setStyleSheet(Utils::readStylesheets(":/styles/download.qss")); m_pWidgetDownload->applyTheme(m_pMainPanel->property("uitheme").toString()); m_pWidgetDownload->updateScalingFactor(m_dpiRatio); @@ -1484,3 +1490,12 @@ void CMainWindow::cancelClose() { m_isCloseAll && (m_isCloseAll = false); } + +void CMainWindow::onLayoutDirectionChanged() +{ + m_pButtonMain->style()->polish(m_pButtonMain); + if (m_pWidgetDownload && m_pWidgetDownload->toolButton()) { + m_pWidgetDownload->onLayoutDirectionChanged(); + m_pWidgetDownload->toolButton()->style()->polish(m_pWidgetDownload->toolButton()); + } +} diff --git a/win-linux/src/windows/cmainwindow.h b/win-linux/src/windows/cmainwindow.h index 77e04e2c7..d528af6b2 100644 --- a/win-linux/src/windows/cmainwindow.h +++ b/win-linux/src/windows/cmainwindow.h @@ -106,6 +106,7 @@ class CMainWindow : public CWindowPlatform, public CScalingWrapper protected: virtual QString getSaveMessage() const; virtual void refreshAboutVersion() {}; + virtual void onLayoutDirectionChanged() final; void closeEvent(QCloseEvent *) override; void showEvent(QShowEvent *) override; diff --git a/win-linux/src/windows/cpresenterwindow.cpp b/win-linux/src/windows/cpresenterwindow.cpp index 449fbb640..d4d0e153e 100644 --- a/win-linux/src/windows/cpresenterwindow.cpp +++ b/win-linux/src/windows/cpresenterwindow.cpp @@ -99,6 +99,11 @@ void CPresenterWindow::closeEvent(QCloseEvent *e) e->ignore(); } +void CPresenterWindow::onLayoutDirectionChanged() +{ + +} + /** Private **/ QWidget * CPresenterWindow::createMainPanel(QWidget * parent, const QString& title, QWidget * view) diff --git a/win-linux/src/windows/cpresenterwindow.h b/win-linux/src/windows/cpresenterwindow.h index 62254bff8..b14a5a4a5 100644 --- a/win-linux/src/windows/cpresenterwindow.h +++ b/win-linux/src/windows/cpresenterwindow.h @@ -52,6 +52,7 @@ class CPresenterWindow : public CWindowPlatform protected: void closeEvent(QCloseEvent *) final; + virtual void onLayoutDirectionChanged() final; private: QWidget * createMainPanel(QWidget *, const QString&, QWidget * view = nullptr); diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.cpp b/win-linux/src/windows/platform_linux/cwindowplatform.cpp index c8ba15ad1..32086a30b 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_linux/cwindowplatform.cpp @@ -49,6 +49,8 @@ CWindowPlatform::CWindowPlatform(const QRect &rect) : CWindowBase(rect), CX11Decoration(this) { + if (AscAppManager::isRtlEnabled()) + setLayoutDirection(Qt::RightToLeft); if (isCustomWindowStyle()) { if (QX11Info::isCompositingManagerRunning()) setAttribute(Qt::WA_TranslucentBackground); @@ -120,6 +122,12 @@ bool CWindowPlatform::event(QEvent * event) if (event->type() == QEvent::HoverLeave) { if (m_boxTitleBtns) m_boxTitleBtns->setCursor(QCursor(Qt::ArrowCursor)); + } else + if (event->type() == QEvent::LayoutDirectionChange) { + if (m_pMainPanel) { + m_pMainPanel->setProperty("rtl", AscAppManager::isRtlEnabled()); + onLayoutDirectionChanged(); + } } return CWindowBase::event(event); } diff --git a/win-linux/src/windows/platform_linux/cwindowplatform.h b/win-linux/src/windows/platform_linux/cwindowplatform.h index 02a194bc9..b64a55b5b 100644 --- a/win-linux/src/windows/platform_linux/cwindowplatform.h +++ b/win-linux/src/windows/platform_linux/cwindowplatform.h @@ -54,6 +54,7 @@ class CWindowPlatform : public CWindowBase, public CX11Decoration virtual bool nativeEvent(const QByteArray&, void*, long*) final; virtual void setScreenScalingFactor(double, bool resize = true) override; virtual void paintEvent(QPaintEvent *event) override; + virtual void onLayoutDirectionChanged() = 0; private: virtual void mouseMoveEvent(QMouseEvent *) final; diff --git a/win-linux/src/windows/platform_win/cwindowplatform.cpp b/win-linux/src/windows/platform_win/cwindowplatform.cpp index 7f80461b4..90452bb4c 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.cpp +++ b/win-linux/src/windows/platform_win/cwindowplatform.cpp @@ -55,6 +55,8 @@ CWindowPlatform::CWindowPlatform(const QRect &rect) : m_isResizeable(true), m_allowMaximize(true) { + if (AscAppManager::isRtlEnabled()) + setLayoutDirection(Qt::RightToLeft); setWindowFlags(windowFlags() | Qt::Window | Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMaximizeButtonHint |Qt::WindowMinimizeButtonHint | Qt::MSWindowsFixedSizeDialogHint); @@ -151,6 +153,17 @@ bool CWindowPlatform::isSessionInProgress() return m_isSessionInProgress; } +bool CWindowPlatform::event(QEvent * event) +{ + if (event->type() == QEvent::LayoutDirectionChange) { + if (m_pMainPanel) { + m_pMainPanel->setProperty("rtl", AscAppManager::isRtlEnabled()); + onLayoutDirectionChanged(); + } + } + return CWindowBase::event(event); +} + /** Private **/ bool CWindowPlatform::isTaskbarAutoHideOn() diff --git a/win-linux/src/windows/platform_win/cwindowplatform.h b/win-linux/src/windows/platform_win/cwindowplatform.h index fbe592305..0dfa13124 100644 --- a/win-linux/src/windows/platform_win/cwindowplatform.h +++ b/win-linux/src/windows/platform_win/cwindowplatform.h @@ -54,6 +54,8 @@ class CWindowPlatform : public CWindowBase protected: bool isSessionInProgress(); + virtual bool event(QEvent *event) override; + virtual void onLayoutDirectionChanged() = 0; private: bool isTaskbarAutoHideOn(); From dc6c31934b0a6105abb578ad5ddd02d27fe0f4f3 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 1 Dec 2023 01:01:05 +0300 Subject: [PATCH 13/16] [win-nix] added option to turn on rtl mode --- common/loginpage/src/panelsettings.js | 22 ++++++++++++++++++++++ common/loginpage/src/styles.less | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 687516e3c..298a4d9ec 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -260,6 +260,12 @@ +
@@ -300,6 +306,7 @@ $optsSpellcheckMode, $optsLaunchMode, $optsAutoupdateMode; + let $chRtl; function _set_user_name(name) { let me = this; @@ -404,6 +411,10 @@ $optsSpellcheckMode.selectpicker('refresh'); } + if ( $chRtl ) { + _new_settings.rtl = $chRtl.prop("checked"); + } + sdk.command("settings:apply", JSON.stringify(_new_settings)); $btnApply.disable(true); @@ -587,6 +598,17 @@ } } + if ( opts.rtl !== undefined ) { + $chRtl = $('#sett-box-rtl-mode', $panel).parent().show().find('#sett-rtl-mode'); + $chRtl.prop('checked', !!opts.rtl) + .on('change', e => { + $btnApply.prop('disabled') && $btnApply.prop('disabled', false); + }); + + document.body.setAttribute('dir', 'rtl'); + document.body.classList.add('rtl'); + } + $('.settings-field:visible:last').css('margin-bottom','0'); } else if (/updates/.test(cmd)) { diff --git a/common/loginpage/src/styles.less b/common/loginpage/src/styles.less index f219c24aa..797ce3d72 100644 --- a/common/loginpage/src/styles.less +++ b/common/loginpage/src/styles.less @@ -1175,7 +1175,7 @@ li.menu-item { } } -#sett-preview-mode { +.checkbox { width: 12px; height: 18px; margin-right: 16px; From c54f7e1cc7b2ee7371e16b10eab3db5f87453fa7 Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Fri, 1 Dec 2023 01:10:31 +0300 Subject: [PATCH 14/16] [win-nix] debug --- common/loginpage/src/panelsettings.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/loginpage/src/panelsettings.js b/common/loginpage/src/panelsettings.js index 298a4d9ec..ffa9bf33a 100644 --- a/common/loginpage/src/panelsettings.js +++ b/common/loginpage/src/panelsettings.js @@ -605,8 +605,10 @@ $btnApply.prop('disabled') && $btnApply.prop('disabled', false); }); - document.body.setAttribute('dir', 'rtl'); - document.body.classList.add('rtl'); + if ( opts.rtl ) { + document.body.setAttribute('dir', 'rtl'); + document.body.classList.add('rtl'); + } } $('.settings-field:visible:last').css('margin-bottom','0'); From 83dd746076fdd478261b105fab5c0414be0fcc8b Mon Sep 17 00:00:00 2001 From: maxkadushkin Date: Mon, 4 Dec 2023 14:43:50 +0300 Subject: [PATCH 15/16] [start page] fix stylesheet for rtl --- common/loginpage/build/Gruntfile.js | 4 +--- common/loginpage/build/startpage.json | 7 +++++-- common/loginpage/src/index.html | 1 + common/loginpage/src/index.html.deploy | 1 + common/loginpage/src/panelsettings.js | 2 +- common/loginpage/src/styles.less | 5 +++++ 6 files changed, 14 insertions(+), 6 deletions(-) diff --git a/common/loginpage/build/Gruntfile.js b/common/loginpage/build/Gruntfile.js index 65211495a..0671ba270 100644 --- a/common/loginpage/build/Gruntfile.js +++ b/common/loginpage/build/Gruntfile.js @@ -52,9 +52,7 @@ module.exports = function(grunt) { compress: true, ieCompat: false }, - files: { - "<%= pkg.desktop.less.files.dest %>": packageFile['desktop']['less']['files']['src'] - } + files: packageFile.desktop.less.files } }, diff --git a/common/loginpage/build/startpage.json b/common/loginpage/build/startpage.json index 1da51033f..c2f37f6e8 100644 --- a/common/loginpage/build/startpage.json +++ b/common/loginpage/build/startpage.json @@ -54,10 +54,13 @@ ] }, "less": { - "files": { + "files": [{ "src": "../src/styles.less", "dest": "../deploy/styles.css" - } + },{ + "src": "../src/css/rtl.less", + "dest": "../deploy/rtl.css" + }] }, "concat": { "files": { diff --git a/common/loginpage/src/index.html b/common/loginpage/src/index.html index d52299efd..292fb5b7b 100644 --- a/common/loginpage/src/index.html +++ b/common/loginpage/src/index.html @@ -9,6 +9,7 @@ + diff --git a/common/loginpage/src/index.html.deploy b/common/loginpage/src/index.html.deploy index 369cf0621..80fd91336 100644 --- a/common/loginpage/src/index.html.deploy +++ b/common/loginpage/src/index.html.deploy @@ -5,6 +5,7 @@ +