Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions assets/icons/anilist.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 16 additions & 0 deletions assets/js/mangayomi_bridge.js
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,23 @@
}
}

// Kept so switching back to a source already seen is a pointer assignment
// instead of another new Function(code) compile. A cross-search touching
// six sources used to recompile all six on every query.
const registry = globalThis.__sozoProviders || (globalThis.__sozoProviders = {});
if (source && source.id != null) registry[String(source.id)] = instance;

globalThis.__sozoProvider = instance;
return true;
};

/** Makes an already-loaded extension current. False when it is not loaded. */
globalThis.__sozoActivateMangayomi = function (id) {
const registry = globalThis.__sozoProviders || {};
const instance = registry[String(id)];
if (!instance) return false;
globalThis.__sozoProvider = instance;
globalThis.__sozoSource = instance.source || globalThis.__sozoSource;
return true;
};

Expand Down
91 changes: 86 additions & 5 deletions assets/translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,19 @@
"welcome_back": "Welcome back",
"create_account": "Create account",
"login_subtitle": "Sign in to use your profile and saved data.",
"register_subtitle": "Create an account with email, username, and password."
"register_subtitle": "Create an account with email, username, and password.",
"forgot_password_title": "Reset your password",
"forgot_password_subtitle": "Enter the email on your account and we will send a 6-digit code.",
"reset_password_subtitle": "We sent a code to {email}. Enter it with your new password.",
"send_reset_code": "Send code",
"reset_code_sent": "If that email is registered, a code is on its way",
"reset_code_hint": "6-digit code",
"invalid_reset_code": "Enter the 6-digit code",
"new_password_hint": "New password",
"confirm_password_hint": "Repeat new password",
"reset_password": "Reset password",
"resend_code": "Send another code",
"resend_in": "Send again in {seconds}s"
},
"home": {
"title": "Home",
Expand Down Expand Up @@ -178,7 +190,8 @@
"engine_sheet_subtitle": "Pick the engine for this video. You can change it any time in Settings → Player.",
"engine_sheet_dont_ask": "Don't ask again",
"engine_sheet_play": "Play",
"subtitle_preview_text": "The quick brown fox jumps over the lazy dog"
"subtitle_preview_text": "The quick brown fox jumps over the lazy dog",
"server": "Server"
},
"profile": {
"title": "Profile",
Expand Down Expand Up @@ -315,7 +328,31 @@
"local_group": "Local",
"search_in": "Search in",
"sources_hint": "Search several sources at once. Leave empty to use your current provider.",
"searching": "Searching…"
"searching": "Searching…",
"all_source_search": "All-source search",
"cross_hint": "Search across your sources…",
"pick_sources": "Pick which sources to search across.",
"choose_sources": "Choose sources",
"no_sources_selected": "No sources selected — tap to choose",
"sources_selected": "{} selected — tap to change",
"type_to_search_n": "Type to search {} sources at once.",
"found_in": "Found in {} of {} sources",
"results_n": "{} results",
"waiting_for": "Searching {}…",
"no_results_any": "No results in any selected source.",
"offline_note": "Offline — only on-device sources can be searched.",
"group_by_source": "Group by source",
"merge_titles": "Merge titles",
"open_from": "Open from",
"load_more": "Load more",
"search_failed": "Search failed",
"source_failed": "This source is unavailable right now",
"try_all_sources": "Try all sources",
"search_sources": "Search sources",
"filter_providers": "Filter providers…",
"selected_n": "{} selected",
"apply_n": "Apply ({})",
"many_sources_warning": "Searching {} sources may be slow. The app stays responsive, but fewer is snappier."
},
"movie": {
"rating": "Rating",
Expand Down Expand Up @@ -686,7 +723,13 @@
"no_cast": "No cast available",
"no_recommendations": "No recommendations available",
"untitled": "Untitled",
"read": "Read"
"read": "Read",
"watch_later": "Watch Later",
"watched": "Watched",
"follow_series": "Follow series",
"find_other_sources": "Find other sources",
"anilist_track": "Track on AniList",
"anilist_tracked": "Tracked on AniList"
},
"shorts": {
"refresh": "Refresh",
Expand Down Expand Up @@ -934,7 +977,25 @@
"n_episodes_short": "{} ep",
"open_anilist": "AniList",
"connect_tagline": "Track what you watch automatically",
"connect_short": "Connect"
"connect_short": "Connect",
"calendar_title": "Airing calendar",
"calendar_all": "All",
"calendar_mine": "My list",
"calendar_episode": "Episode {episode}",
"calendar_empty": "Nothing airs on this day.",
"calendar_empty_mine": "Nothing from your list airs on this day.",
"calendar_open": "Airing calendar",
"calendar_error": "Could not load the airing schedule.",
"calendar_rate_limited": "AniList is busy right now. Try again in a moment.",
"calendar_list_error": "Couldn't load your AniList list.",
"calendar_now": "now",
"calendar_count": "{count} airings",
"calendar_count_mine": "{mine} of {total} yours",
"calendar_episode_range": "Episodes {from}-{to}",
"calendar_add_planning": "Add to Planning",
"calendar_added_planning": "Added to your Planning list",
"calendar_add_failed": "Could not add this to your list",
"calendar_already_on_list": "Already on your list"
},
"tracker": {
"title": "Tracking",
Expand All @@ -948,5 +1009,25 @@
"unfollow": "Unfollow",
"unfollowed": "{} unfollowed",
"undo": "Undo"
},
"remote": {
"title": "TV remote",
"no_devices": "No linked TVs yet. Pair one from the TV app first.",
"load_failed": "Couldn't load your TVs.",
"tv_offline": "TV is offline",
"idle": "Nothing playing",
"command_failed": "That didn't reach the TV",
"search_on_tv": "SEARCH ON TV",
"search_hint": "Type here, search runs on the TV",
"back": "Back",
"home": "Home",
"open_on_tv": "Play on TV",
"sent_to_tv": "Sent to {device}",
"connected_to": "Connected to {device}",
"not_connected_to": "{device} is not connected",
"turn_tv_on": "Open Sozo on the TV to control it",
"retry": "Try again",
"navigation": "NAVIGATION",
"playback": "PLAYBACK"
}
}
91 changes: 86 additions & 5 deletions assets/translations/ru.json
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,19 @@
"welcome_back": "С возвращением",
"create_account": "Создать аккаунт",
"login_subtitle": "Войдите, чтобы использовать профиль и сохраненные данные.",
"register_subtitle": "Создайте аккаунт с email, именем пользователя и паролем."
"register_subtitle": "Создайте аккаунт с email, именем пользователя и паролем.",
"forgot_password_title": "Сброс пароля",
"forgot_password_subtitle": "Введите email вашего аккаунта — мы отправим 6-значный код.",
"reset_password_subtitle": "Код отправлен на {email}. Введите его и новый пароль.",
"send_reset_code": "Отправить код",
"reset_code_sent": "Если такой email зарегистрирован, код уже в пути",
"reset_code_hint": "6-значный код",
"invalid_reset_code": "Введите 6-значный код",
"new_password_hint": "Новый пароль",
"confirm_password_hint": "Повторите новый пароль",
"reset_password": "Сбросить пароль",
"resend_code": "Отправить ещё раз",
"resend_in": "Повторно через {seconds} с"
},
"home": {
"title": "Главная",
Expand Down Expand Up @@ -178,7 +190,8 @@
"engine_sheet_subtitle": "Выберите плеер для этого видео. Изменить можно в Настройках → Плеер.",
"engine_sheet_dont_ask": "Больше не спрашивать",
"engine_sheet_play": "Смотреть",
"subtitle_preview_text": "Съешь ещё этих мягких французских булок"
"subtitle_preview_text": "Съешь ещё этих мягких французских булок",
"server": "Сервер"
},
"profile": {
"title": "Профиль",
Expand Down Expand Up @@ -315,7 +328,31 @@
"local_group": "Локальные",
"search_in": "Искать в",
"sources_hint": "Ищите сразу в нескольких источниках. Оставьте пустым, чтобы использовать текущего провайдера.",
"searching": "Поиск…"
"searching": "Поиск…",
"all_source_search": "Поиск по всем источникам",
"cross_hint": "Поиск по вашим источникам…",
"pick_sources": "Выберите источники для поиска.",
"choose_sources": "Выбрать источники",
"no_sources_selected": "Источники не выбраны — нажмите, чтобы выбрать",
"sources_selected": "Выбрано: {} — нажмите, чтобы изменить",
"type_to_search_n": "Введите запрос — поиск сразу по {} источникам.",
"found_in": "Найдено в {} из {} источников",
"results_n": "{} результатов",
"waiting_for": "Ищем в {}…",
"no_results_any": "Ни в одном выбранном источнике ничего не найдено.",
"offline_note": "Нет сети — доступны только источники на устройстве.",
"group_by_source": "Группировать по источникам",
"merge_titles": "Объединять одинаковые",
"open_from": "Открыть из",
"load_more": "Показать ещё",
"search_failed": "Не удалось выполнить поиск",
"source_failed": "Этот источник сейчас недоступен",
"try_all_sources": "Искать во всех источниках",
"search_sources": "Источники поиска",
"filter_providers": "Фильтр провайдеров…",
"selected_n": "Выбрано: {}",
"apply_n": "Применить ({})",
"many_sources_warning": "Поиск по {} источникам может быть медленным. Приложение не зависнет, но с меньшим числом источников быстрее."
},
"movie": {
"rating": "Рейтинг",
Expand Down Expand Up @@ -686,7 +723,13 @@
"no_cast": "Нет информации об актёрах",
"no_recommendations": "Нет рекомендаций",
"untitled": "Без названия",
"read": "Читать"
"read": "Читать",
"watch_later": "Смотреть позже",
"watched": "Просмотрено",
"follow_series": "Следить за сериалом",
"find_other_sources": "Найти в других источниках",
"anilist_track": "Отслеживать в AniList",
"anilist_tracked": "Отслеживается в AniList"
},
"shorts": {
"refresh": "Обновить",
Expand Down Expand Up @@ -934,7 +977,25 @@
"n_episodes_short": "{} ep",
"open_anilist": "AniList",
"connect_tagline": "Track what you watch automatically",
"connect_short": "Connect"
"connect_short": "Connect",
"calendar_title": "Календарь выхода",
"calendar_all": "Все",
"calendar_mine": "Мой список",
"calendar_episode": "Эпизод {episode}",
"calendar_empty": "В этот день ничего не выходит.",
"calendar_empty_mine": "В этот день ничего из вашего списка не выходит.",
"calendar_open": "Календарь выхода",
"calendar_error": "Не удалось загрузить расписание выхода.",
"calendar_rate_limited": "AniList сейчас перегружен. Попробуйте через минуту.",
"calendar_list_error": "Не удалось загрузить ваш список AniList.",
"calendar_now": "сейчас",
"calendar_count": "серий: {count}",
"calendar_count_mine": "{mine} из {total} ваших",
"calendar_episode_range": "Серии {from}-{to}",
"calendar_add_planning": "В «Запланировано»",
"calendar_added_planning": "Добавлено в «Запланировано»",
"calendar_add_failed": "Не удалось добавить в список",
"calendar_already_on_list": "Уже в вашем списке"
},
"tracker": {
"title": "Tracking",
Expand All @@ -948,5 +1009,25 @@
"unfollow": "Unfollow",
"unfollowed": "{} unfollowed",
"undo": "Undo"
},
"remote": {
"title": "Пульт для ТВ",
"no_devices": "Нет привязанных ТВ. Сначала свяжите его в приложении на ТВ.",
"load_failed": "Не удалось загрузить ваши ТВ.",
"tv_offline": "ТВ не в сети",
"idle": "Ничего не воспроизводится",
"command_failed": "Команда не дошла до ТВ",
"search_on_tv": "ПОИСК НА ТВ",
"search_hint": "Печатайте здесь — поиск идёт на ТВ",
"back": "Назад",
"home": "Главная",
"open_on_tv": "Смотреть на ТВ",
"sent_to_tv": "Отправлено на {device}",
"connected_to": "Подключено к {device}",
"not_connected_to": "{device} не подключён",
"turn_tv_on": "Откройте Sozo на ТВ, чтобы управлять",
"retry": "Повторить",
"navigation": "НАВИГАЦИЯ",
"playback": "ВОСПРОИЗВЕДЕНИЕ"
}
}
Loading