Skip to content

feat: update Russian translation#2017

Merged
Uri-Tauber merged 2 commits into
crosspoint-reader:masterfrom
muhas:master
May 17, 2026
Merged

feat: update Russian translation#2017
Uri-Tauber merged 2 commits into
crosspoint-reader:masterfrom
muhas:master

Conversation

@muhas
Copy link
Copy Markdown
Contributor

@muhas muhas commented May 16, 2026

Summary

Adds new Russian strings for recently merged features!
And the lines in russian.yaml are sorted the same way as in the english.yaml file to simplify future translations.


AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing, please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? NO

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented May 16, 2026

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: d7c897ee-4b6b-4b8b-ad8f-e4dc1745c8cd

📥 Commits

Reviewing files that changed from the base of the PR and between 24c4a62 and 21fb111.

📒 Files selected for processing (1)
  • lib/I18n/translations/russian.yaml
✅ Files skipped from review due to trivial changes (1)
  • lib/I18n/translations/russian.yaml
📜 Recent review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: cppcheck
  • GitHub Check: build

📝 Walkthrough

Walkthrough

This PR updates the Russian translations YAML adding new UI strings (refresh, restart hint, navigation, XTC labels, search) and a large block for OPDS, auto page-turn, font management, crash/firmware recovery, and interaction hints; two keys were reordered.

Changes

Russian Translation Updates

Layer / File(s) Summary
Basic UI controls and feedback translations
lib/I18n/translations/russian.yaml
Added Russian translations for forced screen refresh (STR_FORCE_REFRESH), device restart hint (STR_RESTARTING_HINT), next/previous page navigation (STR_NEXT_PAGE, STR_PREV_PAGE), and search label (STR_SEARCH).
Display status and key ordering
lib/I18n/translations/russian.yaml
Added XTC status bar labels (STR_XTC_STATUS_BAR, STR_BOTTOM, STR_TOP) and reordered STR_DISPLAY_QR and STR_CHAPTER_PREFIX.
Feature-specific translations (OPDS, fonts, recovery, interactions)
lib/I18n/translations/russian.yaml
Inserted a large set of translations for OPDS sleep cover and server management, auto page-turn configuration, font installation/update/list flows and errors, crash reporting and firmware recovery messaging, keyboard/selection hints, and reintroduced STR_FOOTNOTES and STR_LINK in their new location.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

Suggested reviewers

  • znelson
  • osteotek
  • jpirnay
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: update Russian translation' clearly and concisely describes the main change: adding/updating Russian translation strings.
Description check ✅ Passed The description is directly related to the changeset, explaining that new Russian strings are being added for recent features and that lines are being reordered to match english.yaml.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@lib/I18n/translations/russian.yaml`:
- Line 324: Fix the spelling of the Russian size label by updating the
STR_SIZE_LABEL entry in russian.yaml: change the value from "Раземер: " to the
correct "Размер: " so the translation key STR_SIZE_LABEL contains the proper
Cyrillic spelling.
- Line 301: The key STR_SET_SLEEP_COVER contains English text; replace its value
with the Russian translation — update STR_SET_SLEEP_COVER: "Установить обложку"
(or another context-appropriate Russian phrasing) so the translation file is
fully localized and consistent.
- Line 341: The translation string STR_KB_HINT_EDIT_ENTRY contains a typo
("записиy"); open the translations resource and update the value for
STR_KB_HINT_EDIT_ENTRY from "Удерживайте ВВЕРХ для редактирования записиy" to
"Удерживайте ВВЕРХ для редактирования записи" (remove the stray Latin 'y') and
save the russian.yaml so the corrected Russian keyboard hint is used.
- Line 345: The translation string STR_KB_HINT_CLEAR_TEXT contains typos; update
its value to use correct Russian: replace "что бы" with the conjunction "чтобы"
and fix "отчитисть" to "очистить" so the string reads: Удерживайте <— чтобы
очистить весь текст. Locate STR_KB_HINT_CLEAR_TEXT in the russian.yaml and
replace the existing value accordingly.
- Line 349: Fix the spelling in the Russian translation for the key
STR_KB_HINT_URL_SNIPPETS by changing the value string from "Нажмите URL для
выбора шабонов" to "Нажмите URL для выбора шаблонов" so the word "шаблонов"
(templates) is correct; locate the STR_KB_HINT_URL_SNIPPETS entry in the
translations and update its value accordingly.
- Around line 318-319: Fix the typos in the Russian translations for the font
installation messages: update the value for STR_FONT_INSTALLED from "Шрив
установлен!" to "Шрифт установлен!" and update STR_FONT_INSTALL_FAILED from "Не
удалоь установить шрифт" to "Не удалось установить шрифт" so the keys
STR_FONT_INSTALLED and STR_FONT_INSTALL_FAILED contain the corrected Russian
words.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 2cf5b4bb-fcb3-437a-8860-75bf4e1e348a

📥 Commits

Reviewing files that changed from the base of the PR and between 93e81da and 24c4a62.

📒 Files selected for processing (1)
  • lib/I18n/translations/russian.yaml
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build
  • GitHub Check: cppcheck
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2026-02-23T22:11:42.181Z
Learnt from: ariel-lindemann
Repo: crosspoint-reader/crosspoint-reader PR: 1133
File: lib/I18n/translations/finnish.yaml:92-92
Timestamp: 2026-02-23T22:11:42.181Z
Learning: In translation YAML files located in lib/I18n/translations/, literal percent signs (%) in strings (e.g., STR_HIDE_BATTERY, STR_GO_TO_PERCENT, STR_PERCENT_STEP_HINT) do not require escaping as %% and this convention is consistent across all language translations. Ensure that this pattern is followed for all YAML files in this directory to avoid introducing incorrect formatting markers in localized strings.

Applied to files:

  • lib/I18n/translations/russian.yaml
📚 Learning: 2026-03-25T10:28:30.516Z
Learnt from: jpirnay
Repo: crosspoint-reader/crosspoint-reader PR: 1495
File: lib/I18n/translations/german.yaml:294-322
Timestamp: 2026-03-25T10:28:30.516Z
Learning: In crosspoint-reader, it is expected to include “pre-emptive” translation keys in non-English YAML files before the corresponding English keys exist (e.g., german.yaml ahead of en.yaml). When reviewing changes to files under lib/I18n/translations/*.yaml, do not flag missing corresponding English keys in non-English locales as an error if the repo’s gen_i18n.py fallback mechanism is intended to handle missing English keys safely until the pending PRs land.

Applied to files:

  • lib/I18n/translations/russian.yaml
📚 Learning: 2026-04-17T18:59:20.878Z
Learnt from: KymAndriy
Repo: crosspoint-reader/crosspoint-reader PR: 1684
File: lib/I18n/translations/ukrainian.yaml:29-29
Timestamp: 2026-04-17T18:59:20.878Z
Learning: For Ukrainian (and other Slavic-language) translation YAML strings in lib/I18n/translations/*.yaml: if a format string contains a numeric placeholder produced via snprintf-style formatting (e.g., %zu) and runtime noun inflection is not feasible, place the relevant noun in genitive plural before the number in the string (e.g., "мереж %zu") rather than after it (e.g., "мережу %zu"). This avoids incorrect case forms that would otherwise result from the value affecting inflection (e.g., wrong forms like "мережу/мережі/мереж"). In such cases, do not flag the word order as incorrect.

Applied to files:

  • lib/I18n/translations/russian.yaml
🔇 Additional comments (10)
lib/I18n/translations/russian.yaml (10)

133-133: LGTM!

Also applies to: 174-174, 183-184


232-234: LGTM!

Also applies to: 243-243, 270-270


302-304: LGTM!


312-317: LGTM!


320-323: LGTM!


325-334: LGTM!


335-340: LGTM!


342-344: LGTM!


346-348: LGTM!


350-362: LGTM!

Comment thread lib/I18n/translations/russian.yaml Outdated
Comment thread lib/I18n/translations/russian.yaml Outdated
Comment thread lib/I18n/translations/russian.yaml Outdated
Comment thread lib/I18n/translations/russian.yaml Outdated
Comment thread lib/I18n/translations/russian.yaml Outdated
Comment thread lib/I18n/translations/russian.yaml Outdated
@Uri-Tauber Uri-Tauber merged commit 510ee10 into crosspoint-reader:master May 17, 2026
6 checks passed
sabraman added a commit to marginalia-os/marginalia-firmware that referenced this pull request May 18, 2026
* fix: silent-reboot on wifi activity exit to clear heap fragmentation (crosspoint-reader#1908)

WiFi/LWIP/netif teardown scatters long-lived allocations across the
heap, leaving ~50KB of contiguous space unrecoverable without a reboot.

Reboot the SoC on exit from any wifi-using activity to guarantee a clean
heap. An RTC_NOINIT flag survives the reboot and tells setup() to skip
the boot splash and route the user back where they came from:
  - File transfer / Calibre / OPDS / Font download -> home
  - KOReader sync -> currently-open EPUB

Activities check WiFi.getMode() before rebooting, so backing out of the
network mode menu without joining doesn't trigger a cycle. KOSync also
esp_wifi_stop()s after the sync result so the radio is off while the
user reads it; full teardown happens at the reboot.


## Additional Context

The silent reboot skips the booting splash screen - it visibly looks
like a screen refresh. This does cause a disconnection/reconnection blip
for developers actively pulling logs over serial, but `pio device
monitor` and the like successfully reconnect and feed in the early boot
serial.
as an example: 
```
[256676] [DBG] [ACT] Exiting activity: KOReaderSync
[256706] [DBG] [MAIN] Silent restart (target=reader)

ESP-ROM:esp32c3-api1-20210207
Build:Feb  7 2021
rst:0xc (RTC_SW_CPU_RST),boot:0xf (SPI_FAST_FLASH_BOOT)
Saved PC:0x403872bc
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fcd72a0,len:0x990
load:0x403cbf10,len:0xac8
load:0x403ce710,len:0x4d28
entry 0x403cbf10
[22] [INF] [MAIN] Hardware detect: X4
[29] [SD] SD card detected
[43] [DBG] [CPS] Settings loaded from file
[58] [DBG] [KRS] Loaded KOReader credentials for user: jeremydk
[69] [DBG] [OPS] Loaded 1 OPDS servers from file
[69] [DBG] [UI] Using Lyra theme
[70] [DBG] [MAIN] Starting CrossPoint version 1.2.0-dev-detached-bde75787

...

[203] [DBG] [ACT] Entering activity: Reader
[211] [DBG] [EBP] Loading ePub: /Halting State - Charles Stross.epub
[221] [DBG] [BMC] Loaded cache data: 51 spine, 41 TOC entries
[246] [DBG] [CSS] Loaded 41 rules from cache
[247] [DBG] [EBP] Loaded ePub: /Halting State - Charles Stross.epub
```
---
### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _PARTIALLY_

* fix: update Italian translation (crosspoint-reader#1970)

## Summary
* **What is the goal of this PR?** Update the Italian translation.
* **What changes are included?** Took the latest `english.yaml` as
reference and updated `italian.yaml` accordingly, translating new
strings and revising existing ones where needed. Specific changes can be
inspected from the diff.

## Additional Context
* Nothing special to flag — happy to adjust any wording the reviewer
disagrees with.

---
### AI Usage
While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it helps set the right
context for reviewers.
Did you use AI tools to help write this code? _**PARTIALLY**_ — Claude
provided a first-pass draft; I revised and rewrote a substantial portion
by hand.

* fix: several QoL updates for SD font's UI (crosspoint-reader#1965)

## Summary

* **What is the goal of this PR?**  
Improve the UI based on feedback from someone on discord

> Downloading ALL fonts feature.
> 1.1 Disable sleep when downloading, in my case went directly to sleep
just right after downloading.
> 1.2 It would be great to have and overall progress indicator as we
only have the indication of each font family
> 1.3 Any cancel or pause function might come in handy in case battery
is running out and then resume or retry with pending fonts

* **What changes are included?**  
- Now the UI can show overall progress across every file being
downloaded in the batch, not just progress inside the current family.
- Extended `HttpDownloader::downloadToFile()` to accept a cancel flag
and abort the download.
- Rendered a cancel button in the font download UI while a download is
in progress.
- `preventAutoSleep()` in `FontDownloadActivity.h` now returns true for
`state_ == COMPLETE` and `state_ == ERROR` in addition to
`LOADING_MANIFEST` and `DOWNLOADING`

## Additional Context

Not very satisfied with how `HttpDownloader.cpp` is right now, might try
to refactor it after v1.3.0

---

### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _**PARTIALLY**_

* feat: Add swedish hyphenation (crosspoint-reader#1637)

## Summary

* Add swedish hyphenation using scripts/update_hypenation.sh
* Add hyphenation test data using the Swedish translation of Andy Weir's
Project Hail Mary

---

### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _**NO**_

* fix: use power button held time for shutdown logic (crosspoint-reader#1890)

## Summary

* **What is the goal of this PR?**
Fix incorrect power button long-press detection during shutdown/wake
verification by introducing dedicated power button timing logic.
* **What changes are included?**
* Added getPowerButtonHeldTime() to HalGPIO as a wrapper over input
manager logic
* Replaced generic getHeldTime() usage with power-button-specific timing
in verifyPowerButtonWakeup()
* Ensures shutdown/wake decision is based only on actual power button
hold duration, not any-button timing
  * Minor header update for new API exposure in HalGPIO.h
## Additional Context

This fixes a bug where holding another button while briefly pressing the
power button could incorrectly trigger shutdown behavior due to shared
timing state (getHeldTime()).

The change isolates power button timing to prevent cross-button
interference and makes shutdown logic reliable during multi-button
interactions.

No behavioral changes are expected outside of power-button handling
logic.

**Dependencies**
- SDK PR: crosspoint-reader/community-sdk#3

This PR requires the `community-sdk` submodule to be updated after the
SDK change is merged.

- Fixes: crosspoint-reader#1881

---

### AI Usage
Did you use AI tools to help write this code? _**PARTIALLY**_

* fix: prevent card overflow on screens (crosspoint-reader#1943)

## Summary

prevent card overflow

## Additional Context

<img width="1920" height="1080" alt="bug"
src="https://github.com/user-attachments/assets/df84e233-908e-4ce1-8289-d0e9b579bc13"
/>
<img width="1920" height="1080" alt="Bug"
src="https://github.com/user-attachments/assets/cfd20f51-6421-4271-9a62-9c1987cc0dd0"
/>
<img width="1920" height="1080" alt="fix"
src="https://github.com/user-attachments/assets/4fbe83fe-5376-4393-bd45-a825f24e19e3"
/>
<img width="1920" height="1080" alt="fix2"
src="https://github.com/user-attachments/assets/4397848e-d8fa-4c51-ab4d-c32b2fcf33d1"
/>


---

### AI Usage

Did you use AI tools to help write this code? _**NO**_

* fix: update URL-encoded image during EPUB optimization (crosspoint-reader#1985)

## Summary

* **What is the goal of this PR?**  
Fix EPUB optimization when XHTML image references are URL-encoded.

* **What changes are included?**  
The optimizer already converts image files to `.jpg`, but XHTML files
could still reference the original URL-encoded image path, for example:

```html
<img src="images/wensday%201%20full%202.png">
````

The optimized EPUB then contained the converted file:

```text
images/wensday 1 full 2.jpg
```

but the XHTML still pointed to the old `.png`, so CrossPoint failed to
extract/render the image.

The issue was that the previous replacement logic matched only the plain
filename form, such as:

```text
wensday 1 full 2.png
```

but not the URL-encoded form:

```text
wensday%201%20full%202.png
```

This PR updates XHTML image `src` attributes through the existing
DOMParser pass by decoding and resolving the image path before matching
it against renamed images.

After this fix, the optimized EPUB correctly rewrites the XHTML image
reference to the generated `.jpg`, and the image renders correctly.

---

### AI Usage

While CrossPoint doesn't have restrictions on AI tools in contributing,
please be transparent about their usage as it
helps set the right context for reviewers.

Did you use AI tools to help write this code? _**PARTIALLY**_

---

Please let me know if you have questions,
Thank you!

* chore: Update spanish.yaml (crosspoint-reader#2011)

* fix: prune books missing form sd card in recent books list (crosspoint-reader#1959)

* fix: bump open-x4-sdk to clear grayscale state after AA cleanup (crosspoint-reader#2022)

Pulls in community-sdk PR #9, which clears inGrayscaleMode inside
cleanupGrayscaleBuffers() after the restored BW frame is written back
into RED RAM. Without this, the next BW page turn would still see the
flag set and trigger a redundant grayscaleRevert() refresh, producing
visible ghosting on the X4 with text anti-aliasing enabled.

Regression introduced by SDK commit 0a8ada2 (factory LUT grayscale
support), which removed a redundant inGrayscaleMode guard in
grayscaleRevert() and so caused the cleanup to actually run for the
first time.

Bypassing rules to avoid this going stale and all nightly builds being broken for x4 users

* feat: add the Domitian font family (crosspoint-reader#2016)

* fix: harden EPUB optimiser UI gating, size reporting, and picker teardown (crosspoint-reader#1947)

Co-authored-by: Justin Mitchell <justin@jmitch.com>

* feat: update Russian translation (crosspoint-reader#2017)

Co-authored-by: muhas <mail@muhas.name>

* chore: add 3-minute sleep option (crosspoint-reader#1948)

* fix: address upstream sync review comments

---------

Co-authored-by: Jeremy Klein <jeremydk@gmail.com>
Co-authored-by: luca <31419534+alan0ford@users.noreply.github.com>
Co-authored-by: WuTofu <5987870+WuTofu@users.noreply.github.com>
Co-authored-by: Stefan Blixten Karlsson <sbkarlsson@gmail.com>
Co-authored-by: marcinoktawian <marcin.oktawian@gmail.com>
Co-authored-by: Kira <104837532+Kirillka8996@users.noreply.github.com>
Co-authored-by: Blue <felicisimone9@gmail.com>
Co-authored-by: mvidelatraduc <113857985+mvidelatraduc@users.noreply.github.com>
Co-authored-by: KemoNine <mcrosson@users.noreply.github.com>
Co-authored-by: Justin Mitchell <justin@jmitch.com>
Co-authored-by: Matteo Scopel <matteo@scopel.email>
Co-authored-by: zgredex <112968378+zgredex@users.noreply.github.com>
Co-authored-by: muhas <muhas@muhas.ru>
Co-authored-by: muhas <mail@muhas.name>
pablohc pushed a commit to pablohc/crosspoint-reader that referenced this pull request May 19, 2026
Co-authored-by: muhas <mail@muhas.name>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants