From 22bb6120a52866244fad658ed622002abdba2eec Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 18 Mar 2025 12:01:53 +0100 Subject: [PATCH 1/5] l10n: Update translations from Weblate. --- assets/l10n/app_ru.arb | 224 +++++++++++++++++- .../l10n/zulip_localizations_ru.dart | 84 +++---- 2 files changed, 265 insertions(+), 43 deletions(-) diff --git a/assets/l10n/app_ru.arb b/assets/l10n/app_ru.arb index b0717b14ab..9f6e05c8bc 100644 --- a/assets/l10n/app_ru.arb +++ b/assets/l10n/app_ru.arb @@ -377,7 +377,7 @@ "@composeBoxTopicHintText": { "description": "Hint text for topic input widget in compose box." }, - "messageListGroupYouWithYourself": "Вы с собой", + "messageListGroupYouWithYourself": "Сообщения с собой", "@messageListGroupYouWithYourself": { "description": "Message list recipient header for a DM group that only includes yourself." }, @@ -754,5 +754,227 @@ "errorMessageNotSent": "Сообщение не отправлено", "@errorMessageNotSent": { "description": "Error message for compose box when a message could not be sent." + }, + "openLinksWithInAppBrowser": "Открывать ссылки внутри приложения", + "@openLinksWithInAppBrowser": { + "description": "Label for toggling setting to open links with in-app browser" + }, + "errorCouldNotShowUserProfile": "Не удалось показать профиль пользователя.", + "@errorCouldNotShowUserProfile": { + "description": "Message that appears on the user profile page when the profile cannot be shown." + }, + "errorCouldNotOpenLinkTitle": "Не удалось открыть ссылку", + "@errorCouldNotOpenLinkTitle": { + "description": "Error title when opening a link failed." + }, + "composeBoxLoadingMessage": "(загрузка сообщения {messageId})", + "@composeBoxLoadingMessage": { + "description": "Placeholder in compose box showing the quoted message is currently loading.", + "placeholders": { + "messageId": { + "type": "int", + "example": "1234" + } + } + }, + "dmsWithYourselfPageTitle": "ЛС с собой", + "@dmsWithYourselfPageTitle": { + "description": "Message list page title for a DM group that only includes yourself." + }, + "dmsWithOthersPageTitle": "ЛС с {others}", + "@dmsWithOthersPageTitle": { + "description": "Message list page title for a DM group with others.", + "placeholders": { + "others": { + "type": "String", + "example": "Alice, Bob" + } + } + }, + "lightboxVideoDuration": "Длительность видео", + "@lightboxVideoDuration": { + "description": "The total duration of the video playing in the lightbox." + }, + "pinnedSubscriptionsLabel": "Закреплены", + "@pinnedSubscriptionsLabel": { + "description": "Label for the list of pinned subscribed channels." + }, + "unpinnedSubscriptionsLabel": "Откреплены", + "@unpinnedSubscriptionsLabel": { + "description": "Label for the list of unpinned subscribed channels." + }, + "subscriptionListNoChannels": "Каналы не найдены", + "@subscriptionListNoChannels": { + "description": "Text to display on subscribed-channels page when there are no subscribed channels." + }, + "wildcardMentionAll": "все", + "@wildcardMentionAll": { + "description": "Text for \"@all\" wildcard-mention autocomplete option when writing a channel or DM message." + }, + "noEarlierMessages": "Предшествующих сообщений нет", + "@noEarlierMessages": { + "description": "Text to show at the start of a message list if there are no earlier messages." + }, + "actionSheetOptionMarkChannelAsRead": "Отметить канал как прочитанный", + "@actionSheetOptionMarkChannelAsRead": { + "description": "Label for marking a channel as read." + }, + "actionSheetOptionMarkTopicAsRead": "Отметить тему как прочитанную", + "@actionSheetOptionMarkTopicAsRead": { + "description": "Option to mark a specific topic as read in the action sheet." + }, + "reactedEmojiSelfUser": "Вы", + "@reactedEmojiSelfUser": { + "description": "Display name for the user themself, to show on an emoji reaction added by the user." + }, + "wildcardMentionEveryone": "каждый", + "@wildcardMentionEveryone": { + "description": "Text for \"@everyone\" wildcard-mention autocomplete option when writing a channel or DM message." + }, + "zulipAppTitle": "Zulip", + "@zulipAppTitle": { + "description": "The name of Zulip. This should be either 'Zulip' or a transliteration." + }, + "actionSheetOptionResolveTopic": "Поставить отметку \"решено\"", + "@actionSheetOptionResolveTopic": { + "description": "Label for the 'Mark as resolved' button on the topic action sheet." + }, + "filenameAndSizeInMiB": "{filename}: {size} МиБ", + "@filenameAndSizeInMiB": { + "description": "The name of a file, and its size in mebibytes.", + "placeholders": { + "filename": { + "type": "String", + "example": "foo.txt" + }, + "size": { + "type": "String", + "example": "20.2" + } + } + }, + "errorCouldNotOpenLink": "Не удалось открыть ссылку: {url}", + "@errorCouldNotOpenLink": { + "description": "Error message when opening a link failed.", + "placeholders": { + "url": { + "type": "String", + "example": "https://chat.example.com" + } + } + }, + "composeBoxChannelContentHint": "Сообщение для {destination}", + "@composeBoxChannelContentHint": { + "description": "Hint text for content input when sending a message to a channel.", + "placeholders": { + "destination": { + "type": "String", + "example": "#channel name > topic name" + } + } + }, + "unknownChannelName": "(неизвестный канал)", + "@unknownChannelName": { + "description": "Replacement name for channel when it cannot be found in the store." + }, + "recentDmConversationsSectionHeader": "Личные сообщения", + "@recentDmConversationsSectionHeader": { + "description": "Heading for direct messages section on the 'Inbox' message view." + }, + "pollVoterNames": "({voterNames})", + "@pollVoterNames": { + "description": "The list of people who voted for a poll option, wrapped in parentheses.", + "placeholders": { + "voterNames": { + "type": "String", + "example": "Alice, Bob, Chad" + } + } + }, + "settingsPageTitle": "Настройки", + "@settingsPageTitle": { + "description": "Title for the settings page." + }, + "actionSheetOptionUnresolveTopic": "Снять отметку \"решено\"", + "@actionSheetOptionUnresolveTopic": { + "description": "Label for the 'Mark as unresolved' button on the topic action sheet." + }, + "errorResolveTopicFailedTitle": "Не удалось отметить тему как решенную", + "@errorResolveTopicFailedTitle": { + "description": "Error title when marking a topic as resolved failed." + }, + "errorUnresolveTopicFailedTitle": "Не удалось отметить тему как нерешенную", + "@errorUnresolveTopicFailedTitle": { + "description": "Error title when marking a topic as unresolved failed." + }, + "lightboxVideoCurrentPosition": "Место воспроизведения", + "@lightboxVideoCurrentPosition": { + "description": "The current playback position of the video playing in the lightbox." + }, + "wildcardMentionChannel": "канал", + "@wildcardMentionChannel": { + "description": "Text for \"@channel\" wildcard-mention autocomplete option when writing a channel message." + }, + "wildcardMentionStreamDescription": "Оповестить канал", + "@wildcardMentionStreamDescription": { + "description": "Description for \"@all\", \"@everyone\", and \"@stream\" wildcard-mention autocomplete options when writing a channel message in older servers." + }, + "themeSettingTitle": "РЕЖИМ", + "@themeSettingTitle": { + "description": "Title for theme setting. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)" + }, + "themeSettingDark": "Темный", + "@themeSettingDark": { + "description": "Label for dark theme setting." + }, + "themeSettingLight": "Светлый", + "@themeSettingLight": { + "description": "Label for light theme setting." + }, + "themeSettingSystem": "Системный", + "@themeSettingSystem": { + "description": "Label for system theme setting." + }, + "scrollToBottomTooltip": "Пролистать вниз", + "@scrollToBottomTooltip": { + "description": "Tooltip for button to scroll to bottom." + }, + "errorCouldNotConnectTitle": "Нет связи с сервером", + "@errorCouldNotConnectTitle": { + "description": "Error title when the app could not connect to the server." + }, + "errorInvalidApiKeyMessage": "Не удалось войти в вашу учетную запись {url}. Попробуйте еще раз или используйте другую учетную запись.", + "@errorInvalidApiKeyMessage": { + "description": "Error message in the dialog for invalid API key.", + "placeholders": { + "url": { + "type": "String", + "example": "http://chat.example.com/" + } + } + }, + "appVersionUnknownPlaceholder": "(…)", + "@appVersionUnknownPlaceholder": { + "description": "Placeholder to show in place of the app version when it is unknown." + }, + "wildcardMentionChannelDescription": "Оповестить канал", + "@wildcardMentionChannelDescription": { + "description": "Description for \"@all\", \"@everyone\", \"@channel\", and \"@stream\" wildcard-mention autocomplete options when writing a channel message." + }, + "wildcardMentionTopicDescription": "Оповестить тему", + "@wildcardMentionTopicDescription": { + "description": "Description for \"@topic\" wildcard-mention autocomplete options when writing a channel message." + }, + "wildcardMentionStream": "канал", + "@wildcardMentionStream": { + "description": "Text for \"@stream\" wildcard-mention autocomplete option when writing a channel message in older servers." + }, + "wildcardMentionTopic": "тема", + "@wildcardMentionTopic": { + "description": "Text for \"@topic\" wildcard-mention autocomplete option when writing a channel message." + }, + "wildcardMentionAllDmDescription": "Оповестить получателей", + "@wildcardMentionAllDmDescription": { + "description": "Description for \"@all\" and \"@everyone\" wildcard-mention autocomplete options when writing a DM message." } } diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index 946fe8c231..37c21b26cf 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -24,7 +24,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get chooseAccountPageTitle => 'Выберите учетную запись'; @override - String get settingsPageTitle => 'Settings'; + String get settingsPageTitle => 'Настройки'; @override String get switchAccountButton => 'Сменить учетную запись'; @@ -56,7 +56,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get profileButtonSendDirectMessage => 'Отправить личное сообщение'; @override - String get errorCouldNotShowUserProfile => 'Could not show user profile.'; + String get errorCouldNotShowUserProfile => 'Не удалось показать профиль пользователя.'; @override String get permissionsNeededTitle => 'Требуются разрешения'; @@ -71,7 +71,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get permissionsDeniedReadExternalStorage => 'Для загрузки файлов, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.'; @override - String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; + String get actionSheetOptionMarkChannelAsRead => 'Отметить канал как прочитанный'; @override String get actionSheetOptionMuteTopic => 'Отключить тему'; @@ -86,16 +86,16 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get actionSheetOptionUnfollowTopic => 'Не отслеживать тему'; @override - String get actionSheetOptionResolveTopic => 'Mark as resolved'; + String get actionSheetOptionResolveTopic => 'Поставить отметку \"решено\"'; @override - String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; + String get actionSheetOptionUnresolveTopic => 'Снять отметку \"решено\"'; @override - String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; + String get errorResolveTopicFailedTitle => 'Не удалось отметить тему как решенную'; @override - String get errorUnresolveTopicFailedTitle => 'Failed to mark topic as unresolved'; + String get errorUnresolveTopicFailedTitle => 'Не удалось отметить тему как нерешенную'; @override String get actionSheetOptionCopyMessageText => 'Скопировать текст сообщения'; @@ -119,7 +119,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get actionSheetOptionUnstarMessage => 'Снять отметку с сообщения'; @override - String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; + String get actionSheetOptionMarkTopicAsRead => 'Отметить тему как прочитанную'; @override String get errorWebAuthOperationalErrorTitle => 'Что-то пошло не так'; @@ -148,7 +148,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String filenameAndSizeInMiB(String filename, String size) { - return '$filename: $size MiB'; + return '$filename: $size МиБ'; } @override @@ -188,7 +188,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get errorCouldNotConnectTitle => 'Could not connect'; + String get errorCouldNotConnectTitle => 'Нет связи с сервером'; @override String get errorMessageDoesNotSeemToExist => 'Это сообщение, похоже, отсутствует.'; @@ -218,11 +218,11 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get errorCouldNotOpenLinkTitle => 'Unable to open link'; + String get errorCouldNotOpenLinkTitle => 'Не удалось открыть ссылку'; @override String errorCouldNotOpenLink(String url) { - return 'Link could not be opened: $url'; + return 'Не удалось открыть ссылку: $url'; } @override @@ -286,14 +286,14 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String composeBoxChannelContentHint(String destination) { - return 'Message $destination'; + return 'Сообщение для $destination'; } @override String get composeBoxSendTooltip => 'Отправить'; @override - String get unknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(неизвестный канал)'; @override String get composeBoxTopicHintText => 'Тема'; @@ -305,14 +305,14 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String composeBoxLoadingMessage(int messageId) { - return '(loading message $messageId)'; + return '(загрузка сообщения $messageId)'; } @override String get unknownUserName => '(неизвестный пользователь)'; @override - String get dmsWithYourselfPageTitle => 'DMs with yourself'; + String get dmsWithYourselfPageTitle => 'ЛС с собой'; @override String messageListGroupYouAndOthers(String others) { @@ -321,11 +321,11 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String dmsWithOthersPageTitle(String others) { - return 'DMs with $others'; + return 'ЛС с $others'; } @override - String get messageListGroupYouWithYourself => 'Вы с собой'; + String get messageListGroupYouWithYourself => 'Сообщения с собой'; @override String get contentValidationErrorTooLong => 'Длина сообщения не должна превышать 10000 символов.'; @@ -361,10 +361,10 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get lightboxCopyLinkTooltip => 'Скопировать ссылку'; @override - String get lightboxVideoCurrentPosition => 'Current position'; + String get lightboxVideoCurrentPosition => 'Место воспроизведения'; @override - String get lightboxVideoDuration => 'Video duration'; + String get lightboxVideoDuration => 'Длительность видео'; @override String get loginPageTitle => 'Вход в систему'; @@ -415,7 +415,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String errorInvalidApiKeyMessage(String url) { - return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; + return 'Не удалось войти в вашу учетную запись $url. Попробуйте еще раз или используйте другую учетную запись.'; } @override @@ -525,7 +525,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get recentDmConversationsPageTitle => 'Личные сообщения'; @override - String get recentDmConversationsSectionHeader => 'Direct messages'; + String get recentDmConversationsSectionHeader => 'Личные сообщения'; @override String get combinedFeedPageTitle => 'Объединенная лента'; @@ -557,19 +557,19 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get pinnedSubscriptionsLabel => 'Pinned'; + String get pinnedSubscriptionsLabel => 'Закреплены'; @override - String get unpinnedSubscriptionsLabel => 'Unpinned'; + String get unpinnedSubscriptionsLabel => 'Откреплены'; @override - String get subscriptionListNoChannels => 'No channels found'; + String get subscriptionListNoChannels => 'Каналы не найдены'; @override String get notifSelfUser => 'Вы'; @override - String get reactedEmojiSelfUser => 'You'; + String get reactedEmojiSelfUser => 'Вы'; @override String onePersonTyping(String typist) { @@ -585,31 +585,31 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get manyPeopleTyping => 'Несколько человек набирают сообщения…'; @override - String get wildcardMentionAll => 'all'; + String get wildcardMentionAll => 'все'; @override - String get wildcardMentionEveryone => 'everyone'; + String get wildcardMentionEveryone => 'каждый'; @override - String get wildcardMentionChannel => 'channel'; + String get wildcardMentionChannel => 'канал'; @override - String get wildcardMentionStream => 'stream'; + String get wildcardMentionStream => 'канал'; @override - String get wildcardMentionTopic => 'topic'; + String get wildcardMentionTopic => 'тема'; @override - String get wildcardMentionChannelDescription => 'Notify channel'; + String get wildcardMentionChannelDescription => 'Оповестить канал'; @override - String get wildcardMentionStreamDescription => 'Notify stream'; + String get wildcardMentionStreamDescription => 'Оповестить канал'; @override - String get wildcardMentionAllDmDescription => 'Notify recipients'; + String get wildcardMentionAllDmDescription => 'Оповестить получателей'; @override - String get wildcardMentionTopicDescription => 'Notify topic'; + String get wildcardMentionTopicDescription => 'Оповестить тему'; @override String get messageIsEditedLabel => 'ИЗМЕНЕНО'; @@ -623,19 +623,19 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get themeSettingTitle => 'THEME'; + String get themeSettingTitle => 'РЕЖИМ'; @override - String get themeSettingDark => 'Dark'; + String get themeSettingDark => 'Темный'; @override - String get themeSettingLight => 'Light'; + String get themeSettingLight => 'Светлый'; @override - String get themeSettingSystem => 'System'; + String get themeSettingSystem => 'Системный'; @override - String get openLinksWithInAppBrowser => 'Open links with in-app browser'; + String get openLinksWithInAppBrowser => 'Открывать ссылки внутри приложения'; @override String get pollWidgetQuestionMissing => 'Нет вопроса.'; @@ -662,10 +662,10 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get emojiPickerSearchEmoji => 'Поиск эмодзи'; @override - String get noEarlierMessages => 'No earlier messages'; + String get noEarlierMessages => 'Предшествующих сообщений нет'; @override - String get scrollToBottomTooltip => 'Scroll to bottom'; + String get scrollToBottomTooltip => 'Пролистать вниз'; @override String get appVersionUnknownPlaceholder => '(…)'; From 6ef146fd42261bf10f96d64a5e269f7e6fb2ad69 Mon Sep 17 00:00:00 2001 From: Ashutosh Khadse <128621280+AshutoshKhadse23@users.noreply.github.com> Date: Thu, 27 Mar 2025 10:06:03 +0530 Subject: [PATCH 2/5] Update app_ru.arb --- assets/l10n/app_ru.arb | 224 +---------------------------------------- 1 file changed, 1 insertion(+), 223 deletions(-) diff --git a/assets/l10n/app_ru.arb b/assets/l10n/app_ru.arb index 9f6e05c8bc..b0717b14ab 100644 --- a/assets/l10n/app_ru.arb +++ b/assets/l10n/app_ru.arb @@ -377,7 +377,7 @@ "@composeBoxTopicHintText": { "description": "Hint text for topic input widget in compose box." }, - "messageListGroupYouWithYourself": "Сообщения с собой", + "messageListGroupYouWithYourself": "Вы с собой", "@messageListGroupYouWithYourself": { "description": "Message list recipient header for a DM group that only includes yourself." }, @@ -754,227 +754,5 @@ "errorMessageNotSent": "Сообщение не отправлено", "@errorMessageNotSent": { "description": "Error message for compose box when a message could not be sent." - }, - "openLinksWithInAppBrowser": "Открывать ссылки внутри приложения", - "@openLinksWithInAppBrowser": { - "description": "Label for toggling setting to open links with in-app browser" - }, - "errorCouldNotShowUserProfile": "Не удалось показать профиль пользователя.", - "@errorCouldNotShowUserProfile": { - "description": "Message that appears on the user profile page when the profile cannot be shown." - }, - "errorCouldNotOpenLinkTitle": "Не удалось открыть ссылку", - "@errorCouldNotOpenLinkTitle": { - "description": "Error title when opening a link failed." - }, - "composeBoxLoadingMessage": "(загрузка сообщения {messageId})", - "@composeBoxLoadingMessage": { - "description": "Placeholder in compose box showing the quoted message is currently loading.", - "placeholders": { - "messageId": { - "type": "int", - "example": "1234" - } - } - }, - "dmsWithYourselfPageTitle": "ЛС с собой", - "@dmsWithYourselfPageTitle": { - "description": "Message list page title for a DM group that only includes yourself." - }, - "dmsWithOthersPageTitle": "ЛС с {others}", - "@dmsWithOthersPageTitle": { - "description": "Message list page title for a DM group with others.", - "placeholders": { - "others": { - "type": "String", - "example": "Alice, Bob" - } - } - }, - "lightboxVideoDuration": "Длительность видео", - "@lightboxVideoDuration": { - "description": "The total duration of the video playing in the lightbox." - }, - "pinnedSubscriptionsLabel": "Закреплены", - "@pinnedSubscriptionsLabel": { - "description": "Label for the list of pinned subscribed channels." - }, - "unpinnedSubscriptionsLabel": "Откреплены", - "@unpinnedSubscriptionsLabel": { - "description": "Label for the list of unpinned subscribed channels." - }, - "subscriptionListNoChannels": "Каналы не найдены", - "@subscriptionListNoChannels": { - "description": "Text to display on subscribed-channels page when there are no subscribed channels." - }, - "wildcardMentionAll": "все", - "@wildcardMentionAll": { - "description": "Text for \"@all\" wildcard-mention autocomplete option when writing a channel or DM message." - }, - "noEarlierMessages": "Предшествующих сообщений нет", - "@noEarlierMessages": { - "description": "Text to show at the start of a message list if there are no earlier messages." - }, - "actionSheetOptionMarkChannelAsRead": "Отметить канал как прочитанный", - "@actionSheetOptionMarkChannelAsRead": { - "description": "Label for marking a channel as read." - }, - "actionSheetOptionMarkTopicAsRead": "Отметить тему как прочитанную", - "@actionSheetOptionMarkTopicAsRead": { - "description": "Option to mark a specific topic as read in the action sheet." - }, - "reactedEmojiSelfUser": "Вы", - "@reactedEmojiSelfUser": { - "description": "Display name for the user themself, to show on an emoji reaction added by the user." - }, - "wildcardMentionEveryone": "каждый", - "@wildcardMentionEveryone": { - "description": "Text for \"@everyone\" wildcard-mention autocomplete option when writing a channel or DM message." - }, - "zulipAppTitle": "Zulip", - "@zulipAppTitle": { - "description": "The name of Zulip. This should be either 'Zulip' or a transliteration." - }, - "actionSheetOptionResolveTopic": "Поставить отметку \"решено\"", - "@actionSheetOptionResolveTopic": { - "description": "Label for the 'Mark as resolved' button on the topic action sheet." - }, - "filenameAndSizeInMiB": "{filename}: {size} МиБ", - "@filenameAndSizeInMiB": { - "description": "The name of a file, and its size in mebibytes.", - "placeholders": { - "filename": { - "type": "String", - "example": "foo.txt" - }, - "size": { - "type": "String", - "example": "20.2" - } - } - }, - "errorCouldNotOpenLink": "Не удалось открыть ссылку: {url}", - "@errorCouldNotOpenLink": { - "description": "Error message when opening a link failed.", - "placeholders": { - "url": { - "type": "String", - "example": "https://chat.example.com" - } - } - }, - "composeBoxChannelContentHint": "Сообщение для {destination}", - "@composeBoxChannelContentHint": { - "description": "Hint text for content input when sending a message to a channel.", - "placeholders": { - "destination": { - "type": "String", - "example": "#channel name > topic name" - } - } - }, - "unknownChannelName": "(неизвестный канал)", - "@unknownChannelName": { - "description": "Replacement name for channel when it cannot be found in the store." - }, - "recentDmConversationsSectionHeader": "Личные сообщения", - "@recentDmConversationsSectionHeader": { - "description": "Heading for direct messages section on the 'Inbox' message view." - }, - "pollVoterNames": "({voterNames})", - "@pollVoterNames": { - "description": "The list of people who voted for a poll option, wrapped in parentheses.", - "placeholders": { - "voterNames": { - "type": "String", - "example": "Alice, Bob, Chad" - } - } - }, - "settingsPageTitle": "Настройки", - "@settingsPageTitle": { - "description": "Title for the settings page." - }, - "actionSheetOptionUnresolveTopic": "Снять отметку \"решено\"", - "@actionSheetOptionUnresolveTopic": { - "description": "Label for the 'Mark as unresolved' button on the topic action sheet." - }, - "errorResolveTopicFailedTitle": "Не удалось отметить тему как решенную", - "@errorResolveTopicFailedTitle": { - "description": "Error title when marking a topic as resolved failed." - }, - "errorUnresolveTopicFailedTitle": "Не удалось отметить тему как нерешенную", - "@errorUnresolveTopicFailedTitle": { - "description": "Error title when marking a topic as unresolved failed." - }, - "lightboxVideoCurrentPosition": "Место воспроизведения", - "@lightboxVideoCurrentPosition": { - "description": "The current playback position of the video playing in the lightbox." - }, - "wildcardMentionChannel": "канал", - "@wildcardMentionChannel": { - "description": "Text for \"@channel\" wildcard-mention autocomplete option when writing a channel message." - }, - "wildcardMentionStreamDescription": "Оповестить канал", - "@wildcardMentionStreamDescription": { - "description": "Description for \"@all\", \"@everyone\", and \"@stream\" wildcard-mention autocomplete options when writing a channel message in older servers." - }, - "themeSettingTitle": "РЕЖИМ", - "@themeSettingTitle": { - "description": "Title for theme setting. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)" - }, - "themeSettingDark": "Темный", - "@themeSettingDark": { - "description": "Label for dark theme setting." - }, - "themeSettingLight": "Светлый", - "@themeSettingLight": { - "description": "Label for light theme setting." - }, - "themeSettingSystem": "Системный", - "@themeSettingSystem": { - "description": "Label for system theme setting." - }, - "scrollToBottomTooltip": "Пролистать вниз", - "@scrollToBottomTooltip": { - "description": "Tooltip for button to scroll to bottom." - }, - "errorCouldNotConnectTitle": "Нет связи с сервером", - "@errorCouldNotConnectTitle": { - "description": "Error title when the app could not connect to the server." - }, - "errorInvalidApiKeyMessage": "Не удалось войти в вашу учетную запись {url}. Попробуйте еще раз или используйте другую учетную запись.", - "@errorInvalidApiKeyMessage": { - "description": "Error message in the dialog for invalid API key.", - "placeholders": { - "url": { - "type": "String", - "example": "http://chat.example.com/" - } - } - }, - "appVersionUnknownPlaceholder": "(…)", - "@appVersionUnknownPlaceholder": { - "description": "Placeholder to show in place of the app version when it is unknown." - }, - "wildcardMentionChannelDescription": "Оповестить канал", - "@wildcardMentionChannelDescription": { - "description": "Description for \"@all\", \"@everyone\", \"@channel\", and \"@stream\" wildcard-mention autocomplete options when writing a channel message." - }, - "wildcardMentionTopicDescription": "Оповестить тему", - "@wildcardMentionTopicDescription": { - "description": "Description for \"@topic\" wildcard-mention autocomplete options when writing a channel message." - }, - "wildcardMentionStream": "канал", - "@wildcardMentionStream": { - "description": "Text for \"@stream\" wildcard-mention autocomplete option when writing a channel message in older servers." - }, - "wildcardMentionTopic": "тема", - "@wildcardMentionTopic": { - "description": "Text for \"@topic\" wildcard-mention autocomplete option when writing a channel message." - }, - "wildcardMentionAllDmDescription": "Оповестить получателей", - "@wildcardMentionAllDmDescription": { - "description": "Description for \"@all\" and \"@everyone\" wildcard-mention autocomplete options when writing a DM message." } } From 28ca0d94ebcf30d8c7dbc79755e9237bb73c7543 Mon Sep 17 00:00:00 2001 From: Ashutosh Khadse <128621280+AshutoshKhadse23@users.noreply.github.com> Date: Thu, 27 Mar 2025 10:08:17 +0530 Subject: [PATCH 3/5] Update zulip_localizations_ru.dart --- .../l10n/zulip_localizations_ru.dart | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index a2b9fa1ac7..f3ec9d623c 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -24,7 +24,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get chooseAccountPageTitle => 'Выберите учетную запись'; @override - String get settingsPageTitle => 'Настройки'; + String get settingsPageTitle => 'Settings'; @override String get switchAccountButton => 'Сменить учетную запись'; @@ -56,7 +56,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get profileButtonSendDirectMessage => 'Отправить личное сообщение'; @override - String get errorCouldNotShowUserProfile => 'Не удалось показать профиль пользователя.'; + String get errorCouldNotShowUserProfile => 'Could not show user profile.'; @override String get permissionsNeededTitle => 'Требуются разрешения'; @@ -71,7 +71,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get permissionsDeniedReadExternalStorage => 'Для загрузки файлов, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.'; @override - String get actionSheetOptionMarkChannelAsRead => 'Отметить канал как прочитанный'; + String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; @override String get actionSheetOptionMuteTopic => 'Отключить тему'; @@ -86,16 +86,16 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get actionSheetOptionUnfollowTopic => 'Не отслеживать тему'; @override - String get actionSheetOptionResolveTopic => 'Поставить отметку \"решено\"'; + String get actionSheetOptionResolveTopic => 'Mark as resolved'; @override - String get actionSheetOptionUnresolveTopic => 'Снять отметку \"решено\"'; + String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; @override - String get errorResolveTopicFailedTitle => 'Не удалось отметить тему как решенную'; + String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; @override - String get errorUnresolveTopicFailedTitle => 'Не удалось отметить тему как нерешенную'; + String get errorUnresolveTopicFailedTitle => 'Failed to mark topic as unresolved'; @override String get actionSheetOptionCopyMessageText => 'Скопировать текст сообщения'; @@ -119,7 +119,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get actionSheetOptionUnstarMessage => 'Снять отметку с сообщения'; @override - String get actionSheetOptionMarkTopicAsRead => 'Отметить тему как прочитанную'; + String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; @override String get errorWebAuthOperationalErrorTitle => 'Что-то пошло не так'; @@ -148,7 +148,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String filenameAndSizeInMiB(String filename, String size) { - return '$filename: $size МиБ'; + return '$filename: $size MiB'; } @override @@ -188,7 +188,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get errorCouldNotConnectTitle => 'Нет связи с сервером'; + String get errorCouldNotConnectTitle => 'Could not connect'; @override String get errorMessageDoesNotSeemToExist => 'Это сообщение, похоже, отсутствует.'; @@ -218,11 +218,11 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get errorCouldNotOpenLinkTitle => 'Не удалось открыть ссылку'; + String get errorCouldNotOpenLinkTitle => 'Unable to open link'; @override String errorCouldNotOpenLink(String url) { - return 'Не удалось открыть ссылку: $url'; + return 'Link could not be opened: $url'; } @override @@ -286,14 +286,14 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String composeBoxChannelContentHint(String destination) { - return 'Сообщение для $destination'; + return 'Message $destination'; } @override String get composeBoxSendTooltip => 'Отправить'; @override - String get unknownChannelName => '(неизвестный канал)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Тема'; @@ -305,14 +305,14 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String composeBoxLoadingMessage(int messageId) { - return '(загрузка сообщения $messageId)'; + return '(loading message $messageId)'; } @override String get unknownUserName => '(неизвестный пользователь)'; @override - String get dmsWithYourselfPageTitle => 'ЛС с собой'; + String get dmsWithYourselfPageTitle => 'DMs with yourself'; @override String messageListGroupYouAndOthers(String others) { @@ -321,11 +321,11 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String dmsWithOthersPageTitle(String others) { - return 'ЛС с $others'; + return 'DMs with $others'; } @override - String get messageListGroupYouWithYourself => 'Сообщения с собой'; + String get messageListGroupYouWithYourself => 'Вы с собой'; @override String get contentValidationErrorTooLong => 'Длина сообщения не должна превышать 10000 символов.'; @@ -361,10 +361,10 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get lightboxCopyLinkTooltip => 'Скопировать ссылку'; @override - String get lightboxVideoCurrentPosition => 'Место воспроизведения'; + String get lightboxVideoCurrentPosition => 'Current position'; @override - String get lightboxVideoDuration => 'Длительность видео'; + String get lightboxVideoDuration => 'Video duration'; @override String get loginPageTitle => 'Вход в систему'; @@ -415,7 +415,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String errorInvalidApiKeyMessage(String url) { - return 'Не удалось войти в вашу учетную запись $url. Попробуйте еще раз или используйте другую учетную запись.'; + return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; } @override @@ -525,7 +525,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get recentDmConversationsPageTitle => 'Личные сообщения'; @override - String get recentDmConversationsSectionHeader => 'Личные сообщения'; + String get recentDmConversationsSectionHeader => 'Direct messages'; @override String get combinedFeedPageTitle => 'Объединенная лента'; @@ -557,19 +557,19 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get pinnedSubscriptionsLabel => 'Закреплены'; + String get pinnedSubscriptionsLabel => 'Pinned'; @override - String get unpinnedSubscriptionsLabel => 'Откреплены'; + String get unpinnedSubscriptionsLabel => 'Unpinned'; @override - String get subscriptionListNoChannels => 'Каналы не найдены'; + String get subscriptionListNoChannels => 'No channels found'; @override String get notifSelfUser => 'Вы'; @override - String get reactedEmojiSelfUser => 'Вы'; + String get reactedEmojiSelfUser => 'You'; @override String onePersonTyping(String typist) { @@ -585,31 +585,31 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get manyPeopleTyping => 'Несколько человек набирают сообщения…'; @override - String get wildcardMentionAll => 'все'; + String get wildcardMentionAll => 'all'; @override - String get wildcardMentionEveryone => 'каждый'; + String get wildcardMentionEveryone => 'everyone'; @override - String get wildcardMentionChannel => 'канал'; + String get wildcardMentionChannel => 'channel'; @override - String get wildcardMentionStream => 'канал'; + String get wildcardMentionStream => 'stream'; @override - String get wildcardMentionTopic => 'тема'; + String get wildcardMentionTopic => 'topic'; @override - String get wildcardMentionChannelDescription => 'Оповестить канал'; + String get wildcardMentionChannelDescription => 'Notify channel'; @override - String get wildcardMentionStreamDescription => 'Оповестить канал'; + String get wildcardMentionStreamDescription => 'Notify stream'; @override - String get wildcardMentionAllDmDescription => 'Оповестить получателей'; + String get wildcardMentionAllDmDescription => 'Notify recipients'; @override - String get wildcardMentionTopicDescription => 'Оповестить тему'; + String get wildcardMentionTopicDescription => 'Notify topic'; @override String get messageIsEditedLabel => 'ИЗМЕНЕНО'; @@ -623,19 +623,19 @@ class ZulipLocalizationsRu extends ZulipLocalizations { } @override - String get themeSettingTitle => 'РЕЖИМ'; + String get themeSettingTitle => 'THEME'; @override - String get themeSettingDark => 'Темный'; + String get themeSettingDark => 'Dark'; @override - String get themeSettingLight => 'Светлый'; + String get themeSettingLight => 'Light'; @override - String get themeSettingSystem => 'Системный'; + String get themeSettingSystem => 'System'; @override - String get openLinksWithInAppBrowser => 'Открывать ссылки внутри приложения'; + String get openLinksWithInAppBrowser => 'Open links with in-app browser'; @override String get pollWidgetQuestionMissing => 'Нет вопроса.'; @@ -668,10 +668,10 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get emojiPickerSearchEmoji => 'Поиск эмодзи'; @override - String get noEarlierMessages => 'Предшествующих сообщений нет'; + String get noEarlierMessages => 'No earlier messages'; @override - String get scrollToBottomTooltip => 'Пролистать вниз'; + String get scrollToBottomTooltip => 'Scroll to bottom'; @override String get appVersionUnknownPlaceholder => '(…)'; From de23585dfcd1db5246be8653fe421c09090a3328 Mon Sep 17 00:00:00 2001 From: Ashutosh Khadse <128621280+AshutoshKhadse23@users.noreply.github.com> Date: Wed, 2 Apr 2025 23:31:27 +0530 Subject: [PATCH 4/5] fix: emoji diacritic --- lib/model/emoji.dart | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lib/model/emoji.dart b/lib/model/emoji.dart index b0ec5f7324..1e6e75a995 100644 --- a/lib/model/emoji.dart +++ b/lib/model/emoji.dart @@ -1,6 +1,6 @@ import 'package:collection/collection.dart'; import 'package:flutter/foundation.dart'; - +import 'package:diacritic/diacritic.dart'; import '../api/model/events.dart'; import '../api/model/initial_snapshot.dart'; import '../api/model/model.dart'; @@ -462,7 +462,7 @@ class EmojiAutocompleteQuery extends ComposeAutocompleteQuery { static const _separator = '_'; static String _adjustQuery(String raw) { - return raw.toLowerCase().replaceAll(' ', '_'); // TODO(#1067) remove diacritics too + return removeDiacritics(raw.toLowerCase()).replaceAll(' ', '_'); } @override @@ -508,17 +508,16 @@ class EmojiAutocompleteQuery extends ComposeAutocompleteQuery { // for the finer distinctions. // See also commentary in [_rankResult]. - // TODO(#1067) this assumes emojiName is already lower-case (and no diacritics) - if (emojiName == _adjusted) return EmojiMatchQuality.exact; - if (emojiName.startsWith(_adjusted)) return EmojiMatchQuality.prefix; - if (emojiName.contains(_sepAdjusted)) return EmojiMatchQuality.wordAligned; + final normalizedEmojiName = removeDiacritics(emojiName.toLowerCase()); + + if (normalizedEmojiName == _adjusted) return EmojiMatchQuality.exact; + if (normalizedEmojiName.startsWith(_adjusted)) return EmojiMatchQuality.prefix; + if (normalizedEmojiName.contains(_sepAdjusted)) return EmojiMatchQuality.wordAligned; if (!_adjusted.contains(_separator)) { // If the query is a single token (doesn't contain a separator), // allow a match anywhere in the string, too. - if (emojiName.contains(_adjusted)) return EmojiMatchQuality.other; - } else { - // Otherwise, require at least a word-aligned match. - } + if (normalizedEmojiName.contains(_adjusted)) return EmojiMatchQuality.other; + } return null; } From 5d7bc7e728c40bfb2b9deee91637012013f32a77 Mon Sep 17 00:00:00 2001 From: Ashutosh Khadse <128621280+AshutoshKhadse23@users.noreply.github.com> Date: Wed, 2 Apr 2025 23:32:32 +0530 Subject: [PATCH 5/5] added the dependencies used for removing diacritic --- pubspec.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/pubspec.yaml b/pubspec.yaml index c95e6fb353..8659fb51b5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -41,6 +41,7 @@ dependencies: crypto: ^3.0.3 device_info_plus: ^11.2.0 drift: ^2.23.0 + diacritic: ^0.1.6 file_picker: ^9.0.2 firebase_core: ^3.3.0 firebase_messaging: ^15.0.1