[I18N] Russian translation (#381)

[I18N] Russian translation file
This commit is contained in:
Pitstopper 2018-07-25 16:14:12 +03:00 committed by Diego Mello
parent 94c7d9e8cc
commit ccaf5413f2
3 changed files with 332 additions and 8 deletions

View File

@ -1,10 +1,11 @@
import I18n from 'react-native-i18n'; import I18n from 'react-native-i18n';
import en from './locales/en'; import en from './locales/en';
import ru from './locales/ru';
I18n.fallbacks = true; I18n.fallbacks = true;
I18n.translations = { I18n.translations = {
en en, ru
}; };
export default I18n; export default I18n;

320
app/i18n/locales/ru.js Normal file
View File

@ -0,0 +1,320 @@
export default {
'1_online_member': '1 участник онлайн',
'1_person_reacted': '1 человек отреагировал',
'error-action-not-allowed': '{{action}} не допускается',
'error-application-not-found': 'Приложение не найдено',
'error-archived-duplicate-name': 'Есть архивный канал с именем {{room_name}}',
'error-avatar-invalid-url': 'Недопустимый URL-адрес аватара: {{url}}',
'error-avatar-url-handling': 'Ошибка при обработке настроек аватара с URL-адреса ({{url}}) для {{username}}',
'error-cant-invite-for-direct-room': 'Невозможно пригласить пользователя в личную переписку',
'error-could-not-change-email': 'Не удалось изменить адрес электронной почты',
'error-could-not-change-name': 'Не удалось изменить имя',
'error-could-not-change-username': 'Не удалось изменить имя пользователя',
'error-delete-protected-role': 'Не удается удалить защищенную роль',
'error-department-not-found': 'Отдел не найден',
'error-direct-message-file-upload-not-allowed': 'Общий доступ к файлам не разрешен в личных сообщениях',
'error-duplicate-channel-name': 'Канал с именем {{channel_name}} существует',
'error-email-domain-blacklisted': 'Домен электронной почты включен в черный список',
'error-email-send-failed': 'Ошибка при попытке отправить электронное письмо: {{message}}',
'error-field-unavailable': '{{field}} уже используется :(',
'error-file-too-large': 'Файл слишком большой',
'error-importer-not-defined': 'Импортер не был определен правильно, ему не хватает класса Import.',
'error-input-is-not-a-valid-field': '{{input}} недействительно {{field}}',
'error-invalid-actionlink': 'Недействительная ссылка действия',
'error-invalid-arguments': 'Недопустимые аргументы',
'error-invalid-asset': 'Недопустимый актив',
'error-invalid-channel': 'Недействительный канал.',
'error-invalid-channel-start-with-chars': 'Недействительный канал. Начните с @ или #',
'error-invalid-custom-field': 'Неверное настраиваемое поле',
'error-invalid-custom-field-name': 'Неверное имя настраиваемого поля. Используйте только буквы, цифры, дефисы и символы подчеркивания.',
'error-invalid-date': 'Указана недопустимая дата.',
'error-invalid-description': 'Недопустимое описание',
'error-invalid-domain': 'Недопустимый домен',
'error-invalid-email': 'Неверный адрес электронной почты {{emai}}',
'error-invalid-email-address': 'Неверный адрес электронной почты',
'error-invalid-file-height': 'Недопустимая высота файла',
'error-invalid-file-type': 'Неверный тип файла',
'error-invalid-file-width': 'Недопустимая ширина файла',
'error-invalid-from-address': 'Вы указали неверный адрес FROM.',
'error-invalid-integration': 'Недопустимая интеграция',
'error-invalid-message': 'Недопустимое сообщение',
'error-invalid-method': 'Недопустимый метод',
'error-invalid-name': 'Недопустимое имя',
'error-invalid-password': 'Неверный пароль',
'error-invalid-redirectUri': 'Недопустимый redirectUri',
'error-invalid-role': 'Недопустимая роль',
'error-invalid-room': 'Недопустимый канал',
'error-invalid-room-name': '{{room_name}} не является допустимым именем канала',
'error-invalid-room-type': '{{type}} не является допустимым типом канала.',
'error-invalid-settings': 'Недопустимые параметры',
'error-invalid-subscription': 'Недействительная подписка',
'error-invalid-token': 'Недопустимый токен',
'error-invalid-triggerWords': 'Недопустимые triggerWords',
'error-invalid-urls': 'Недопустимые URL-адреса',
'error-invalid-user': 'Недопустимый пользователь',
'error-invalid-username': 'Неверное имя пользователя',
'error-invalid-webhook-response': 'URL-адрес ответил статусом, отличным от 200',
'error-message-deleting-blocked': 'Удаление сообщений заблокировано',
'error-message-editing-blocked': 'Редактирование сообщений заблокировано',
'error-message-size-exceeded': 'Размер сообщения превышает Message_MaxAllowedSize',
'error-missing-unsubscribe-link': 'Вы должны указать ссылку [отписаться].',
'error-no-tokens-for-this-user': 'Для этого пользователя нет токенов',
'error-not-allowed': 'Не допускается',
'error-not-authorized': 'Не разрешено',
'error-push-disabled': 'Push отключен',
'error-remove-last-owner': 'Это последний владелец. Прежде чем удалить его, установите нового владельца.',
'error-role-in-use': 'Невозможно удалить роль, потому что она используется',
'error-role-name-required': 'Требуется имя роли',
'error-the-field-is-required': 'Требуется поле {{field}}.',
'error-too-many-requests': 'Ошибка, слишком много запросов. Пожалуйста, помедленнее. Вы должны подождать {{seconds}} секунд, прежде чем повторять попытку.',
'error-user-is-not-activated': 'Пользователь не активирован',
'error-user-has-no-roles': 'Пользователь не имеет ролей',
'error-user-limit-exceeded': 'Количество пользователей, которых вы пытаетесь пригласить на #channel_name, превышает лимит, установленный администратором',
'error-user-not-in-room': 'Пользователя нет на этом канале',
'error-user-registration-custom-field': 'error-user-registration-custom-field',
'error-user-registration-disabled': 'Регистрация пользователей отключена',
'error-user-registration-secret': 'Регистрация пользователей разрешена только через секретный URL',
'error-you-are-last-owner': 'Вы последний владелец. Пожалуйста, установите нового владельца, прежде чем покинуть комнату.',
Actions: 'Действия',
Add_Reaction: 'Добавить реакцию',
Add_Server: 'Добавить сервер',
Add_user: 'Добавить пользователя',
Alert: 'Оповещение',
alert: 'оповещение',
alerts: 'оповещения',
All_users_in_the_channel_can_write_new_messages: 'Все пользователи канала могут писать новые сообщения',
All: 'Все',
Allow_Reactions: 'Разрешить реакции',
and_more: 'и более',
and: 'и',
announcement: 'объявление',
Announcement: 'Объявление',
ARCHIVE: 'АРХИВ',
archive: 'архив',
are_typing: 'печатают',
Are_you_sure_question_mark: 'Вы уверены?',
Are_you_sure_you_want_to_leave_the_room: 'Вы действительно хотите покинуть канал {{room}}?',
Authenticating: 'Аутентификация',
Avatar_changed_successfully: 'Аватар успешно изменен!',
Avatar_Url: 'URL аватара',
Away: 'Отошел',
Block_user: 'Блокировать пользователя',
Broadcast_channel_Description: 'Только авторизованные пользователи могут писать новые сообщения, но другие пользователи смогут ответить',
Broadcast_Channel: 'Широковещательный канал',
Busy: 'Занят',
By_proceeding_you_are_agreeing: 'Продолжая, вы соглашаетесь с нашими',
Cancel_editing: 'Отменить редактирование',
Cancel_recording: 'Отменить запись',
Cancel: 'Отмена',
changing_avatar: 'изменение аватара',
Channel_Name: 'Название канала',
Chats: 'Чаты',
Close: 'Закрыть',
Close_emoji_selector: 'Закрыть селектор emoji',
Choose: 'Выбрать',
Choose_from_library: 'Выбрать из библиотеки',
Code: 'Код',
Colaborative: 'Совместный',
Connect: 'Соединение',
Connected_to: 'Подключен к',
Connecting: 'Соединение',
Copied_to_clipboard: 'Скопировано в буфер обмена!',
Copy_Message: 'Копировать сообщение',
Copy_Permalink: 'Копировать постоянную ссылку',
Create_account: 'Создать аккаунт',
Create_Channel: 'Создать канал',
Create: 'Создать',
Delete_Room_Warning: 'Удаление канала приведет к удалению всех сообщений, размещенных в нем. Это не может быть отменено.',
delete: 'удалить',
Delete: 'Удалить',
DELETE: 'УДАЛИТЬ',
description: 'описание',
Description: 'Описание',
Disable_notifications: 'Отключить уведомления',
Do_you_really_want_to_key_this_room_question_mark: 'Вы действительно хотите {{key}} этот канал?',
edit: 'редактировать',
Edit: 'Редактировать',
Email_or_password_field_is_empty: 'Поле электронной почты или пароля пусты',
Email: 'Электронная почта',
Enable_notifications: 'Включить уведомления',
Everyone_can_access_this_channel: 'Каждый может получить доступ к этому каналу',
Error_uploading: 'Ошибка при загрузке',
Files: 'Файлы',
Finish_recording: 'Завершить запись',
For_your_security_you_must_enter_your_current_password_to_continue: 'В целях вашей безопасности вы должны ввести свой текущий пароль для продолжения',
Forgot_my_password: 'Забыл свой пароль',
Forgot_password_If_this_email_is_registered: 'Если эта электронная почта зарегистрирована, мы отправим инструкции о том, как сбросить пароль. Если вы не получите письмо в ближайшее время, вернитесь и повторите попытку.',
Forgot_password: 'Забыли пароль',
Forgot_Password: 'Забыли Пароль',
Has_joined_the_channel: 'Присоединился к каналу',
Has_left_the_channel: 'Покинул канал',
I_have_an_account: 'У меня есть аккаунт',
Invisible: 'Невидимый',
is_a_valid_RocketChat_instance: 'является действительным сервером Rocket.Chat',
is_not_a_valid_RocketChat_instance: 'не является действительным сервером Rocket.Chat',
is_typing: 'печатает',
Just_invited_people_can_access_this_channel: 'Только приглашенные люди могут получить доступ к этому каналу',
Language: 'Язык',
last_message: 'последнее сообщение',
Leave_channel: 'Покинуть канал',
leave: 'покинуть',
Loading_messages_ellipsis: 'Загрузка сообщений ...',
Login: 'Вход',
Logout: 'Выйти',
Members: 'Пользователи',
Mentioned_Messages: 'Упомянутые сообщения',
mentioned: 'упомянутые',
Mentions: 'Упоминания',
Message_accessibility: 'Сообщение от {{user}} в {{time}}: {{message}}',
Message_actions: 'Действия с сообщением',
Message_pinned: 'Сообщение прикреплено',
Message_removed: 'Сообщение удалено',
Messages: 'Сообщения',
Microphone_Permission_Message: 'Rocket Chat нуждается в доступе к вашему микрофону, чтобы вы могли отправлять аудиосообщения.',
Microphone_Permission: 'Разрешение на использование микрофона',
Mute: 'Заглушить',
muted: 'Заглушен',
My_servers: 'Мои серверы',
N_online_members: '{{n}} пользователей онлайн',
N_person_reacted: '{{n}} людей отреагировало',
Name: 'Имя',
New_in_RocketChat_question_mark: 'Новичок в Rocket.Chat?',
New_Message: 'Новое Сообщение',
New_Password: 'Новый Пароль',
New_Server: 'Новый Сервер',
No_files: 'Нет файлов',
No_mentioned_messages: 'Нет упоминаний',
No_pinned_messages: 'Нет прикрепленных сообщений',
No_snippeted_messages: 'Нет сообщений со сниппетом',
No_starred_messages: 'Нет отмеченных сообщений',
No_announcement_provided: 'Нет объявлений.',
No_description_provided: 'Нет описания.',
No_topic_provided: 'Нет темы.',
No_Message: 'Нет сообщения',
No_Reactions: 'Нет реакций',
Not_logged: 'Не зарегистрирован',
Nothing_to_save: 'Нечего сохранять!',
Notify_active_in_this_room: 'Уведомить всех активных пользователей в этом чате',
Notify_all_in_this_room: 'Уведомить всех в этом чате',
Offline: 'Офлайн',
Online: 'Онлайн',
Only_authorized_users_can_write_new_messages: 'Только авторизованные пользователи могут писать новые сообщения',
Open_emoji_selector: 'Открыть селектор emoji',
Or_continue_using_social_accounts: 'Или продолжить, используя социальные учетные записи',
Password: 'Пароль',
Permalink_copied_to_clipboard: 'Постоянная ссылка скопирована в буфер обмена!',
Pin: 'Прикрепить сообщение',
Pinned_Messages: 'Прикрепленные сообщения',
pinned: 'прикреплено',
Pinned: 'Прикреплено',
Please_enter_your_password: 'Пожалуйста введите ваш пароль',
Preferences_saved: 'Настройки сохранены!',
Privacy_Policy: ' Политика Конфиденциальности',
Private_Channel: 'Приватный канал',
Private: 'Приватный',
Profile_saved_successfully: 'Профиль успешно сохранен!',
Profile: 'Профиль',
Public_Channel: 'Публичный канал',
Public: 'Публичный',
Quote: 'Цитата',
Reactions_are_disabled: 'Реакции отключены',
Reactions_are_enabled: 'Реакции активированы',
Reactions: 'Реакции',
Read_Only_Channel: 'Канал только для чтения',
Read_Only: 'Только для чтения',
Register: 'Зарегистрировать',
Repeat_Password: 'Повторите пароль',
Reply: 'Ответить',
Resend: 'Отправить повторно',
Reset_password: 'Сброс пароля',
RESET: 'СБРОС',
Roles: 'Роли',
Room_actions: 'Действия с каналом',
Room_changed_announcement: 'Объявление канала было изменено на: {{объявление}} пользователем {{userBy}}',
Room_changed_description: 'Описание комнаты было изменено на: {{объявление}} пользователем {{userBy}}',
Room_changed_privacy: 'Тип канала был изменен на: {{type}} пользователем {{userBy}}',
Room_changed_topic: 'Топик канала был изменен на: {{topic}} пользователем {{userBy}}',
Room_Files: 'Файлы',
Room_Info_Edit: 'Редактировать информацию о канале',
Room_Info: 'Информация о канале',
Room_Members: 'Пользователи',
Room_name_changed: 'Название канала было изменено на: {{name}} пользователем {{userBy}}',
SAVE: 'СОХРАНИТЬ',
Save_Changes: 'Сохранить изменения',
Save: 'Сохранить',
saving_preferences: 'сохранение персональных настроек',
saving_profile: 'сохранение профиля',
saving_settings: 'сохранение настроек',
Search_Messages: 'Поиск сообщений',
Search: 'Поиск',
Select_Avatar: 'Выбор аватара',
Select_Users: 'Выбор пользователей',
Send: 'Отправить',
Send_audio_message: 'Отправить аудиосообщение',
Send_message: 'Отправить сообщение',
Servers: 'Серверы',
Settings: 'Настройки',
Settings_succesfully_changed: 'Настройки успешно изменены!',
Share_Message: 'Поделиться сообщением',
Share: 'Поделиться',
Sign_in_your_server: 'Войдите на ваш сервер',
Sign_Up: 'Регистрация',
Snippet_Messages: 'Сообщения со сниппетом',
snippeted: 'сниппет добавлен',
Snippets: 'Сниппеты',
Some_field_is_invalid_or_empty: 'Некоторые поля недопустимы или пусты',
Star_room: 'Star room',
Star: 'Звезда',
Starred_Messages: 'Помеченные сообщения',
starred: 'отмечено',
Starred: 'Отмечено',
Start_of_conversation: 'Начало разговора',
Submit: 'Отправить',
Take_a_photo: 'Сфотографировать',
tap_to_change_status: 'нажмите для изменения статуса',
Tap_to_view_servers_list: 'Нажмите, чтобы просмотреть список серверов',
Terms_of_Service: ' Условия использования ',
There_was_an_error_while_action: 'Произошла ошибка в процессе {{action}}!',
This_room_is_blocked: 'Этот канал заблокирован',
This_room_is_read_only: 'Этот канал доступен только для чтения',
Timezone: 'Часовой пояс',
Toggle_Drawer: 'Toggle_Drawer',
topic: 'топик',
Topic: 'Топик',
Try_again: 'Попробуйте еще раз',
Type_the_channel_name_here: 'Введите название канала здесь',
unarchive: 'разархивировать',
UNARCHIVE: 'РАЗАРХИВИРОВАТЬ',
Unblock_user: 'Разблокировать пользователя',
Unmute: 'Отменить заглушивание',
unmuted: 'Заглушивание отменено',
Unpin: 'Открепить',
unread_messages: 'непрочитанные сообщения',
Unstar: 'Снять отметку',
Uploading: 'Выгрузка',
User_added_by: 'Пользователь {{userAdded}} добавлен по решению {{userBy}}',
User_has_been_key: 'Пользователь был {{key}}!',
User_is_no_longer_role_by_: '{{user}} больше не {{role}} по решению {{userBy}}',
User_muted_by: 'Пользователь {{userMuted}} заглушен по решению {{userBy}}',
User_removed_by: 'Пользователь {{userRemoved}} удален по решению {{userBy}}',
User_unmuted_by: 'Пользователь {{userUnmuted}} перестал быть заглушенным по решению {{userBy}}',
User_was_set_role_by_: '{{user}} был назначен {{role}} пользователем {{userBy}}',
Username_is_empty: 'Имя пользователя пусто',
Username: 'Имя пользователя',
Validating: 'Проверка',
Video_call: 'Видеозвонок',
Voice_call: 'Голосовой вызов',
Welcome: 'Добро пожаловать',
Welcome_title_pt_1: 'Приготовьтесь к взлету с',
Welcome_title_pt_2: 'передовой чат-платформой',
Yes_action_it: 'Да, {{action}} это!',
Yesterday: 'Вчера',
You_are_in_preview_mode: 'Вы находитесь в режиме предварительного просмотра',
You_are_offline: 'Вы не в сети',
You_can_search_using_RegExp_eg: 'Вы можете выполнить поиск с помощью регулярных выражений, например `/^text$/i`',
You_colon: 'Вы: ',
you_were_mentioned: 'вы были упомянуты',
You_will_not_be_able_to_recover_this_message: 'Вы не сможете восстановить это сообщение!',
you: 'вы',
Your_server: 'Ваш сервер'
};

View File

@ -19,7 +19,7 @@ import { setUser } from '../../actions/login';
import { iconsMap } from '../../Icons'; import { iconsMap } from '../../Icons';
@connect(state => ({ @connect(state => ({
language: state.login.user.language userLanguage: state.login.user && state.login.user.language
}), dispatch => ({ }), dispatch => ({
setUser: params => dispatch(setUser(params)) setUser: params => dispatch(setUser(params))
})) }))
@ -27,7 +27,7 @@ import { iconsMap } from '../../Icons';
export default class SettingsView extends LoggedView { export default class SettingsView extends LoggedView {
static propTypes = { static propTypes = {
navigator: PropTypes.object, navigator: PropTypes.object,
language: PropTypes.string, userLanguage: PropTypes.string,
setUser: PropTypes.func setUser: PropTypes.func
} }
@ -35,10 +35,13 @@ export default class SettingsView extends LoggedView {
super('SettingsView', props); super('SettingsView', props);
this.state = { this.state = {
placeholder: {}, placeholder: {},
language: props.language ? props.language : 'en', language: props.userLanguage ? props.userLanguage : 'en',
languages: [{ languages: [{
label: 'English', label: 'English',
value: 'en' value: 'en'
}, {
label: 'Russian',
value: 'ru'
}], }],
saving: false saving: false
}; };
@ -75,7 +78,7 @@ export default class SettingsView extends LoggedView {
formIsChanged = () => { formIsChanged = () => {
const { language } = this.state; const { language } = this.state;
return !(this.props.language === language); return !(this.props.userLanguage === language);
} }
submit = async() => { submit = async() => {
@ -84,7 +87,7 @@ export default class SettingsView extends LoggedView {
const { const {
language language
} = this.state; } = this.state;
const { user } = this.props; const { userLanguage } = this.props;
if (!this.formIsChanged()) { if (!this.formIsChanged()) {
return; return;
@ -93,7 +96,7 @@ export default class SettingsView extends LoggedView {
const params = {}; const params = {};
// language // language
if (user.language !== language) { if (userLanguage !== language) {
params.language = language; params.language = language;
} }
@ -142,7 +145,7 @@ export default class SettingsView extends LoggedView {
inputRef={(e) => { this.name = e; }} inputRef={(e) => { this.name = e; }}
label={I18n.t('Language')} label={I18n.t('Language')}
placeholder={I18n.t('Language')} placeholder={I18n.t('Language')}
value={language} value={languages.find(i => i.value === language).label}
testID='settings-view-language' testID='settings-view-language'
/> />
</RNPickerSelect> </RNPickerSelect>