Skip to content

docs: add Simplified Chinese and Japanese READMEs - #317

Merged
cevheri merged 4 commits into
mainfrom
docs/localized-readmes
Aug 8, 2026
Merged

docs: add Simplified Chinese and Japanese READMEs#317
cevheri merged 4 commits into
mainfrom
docs/localized-readmes

Conversation

@kaya-abdullah

@kaya-abdullah kaya-abdullah commented Aug 8, 2026

Copy link
Copy Markdown
Member

Why

Three channels on the launch plan expect a README in their own language before they will consider a project at all:

Channel When Note
HelloGitHub 月刊 submit by 17 Aug, publishes 28 Aug projects without a Chinese README are largely filtered out
阮一峰 科技爱好者周刊 Fridays, 14 / 21 / 28 Aug China's most-read tech newsletter
V2EX · 掘金 · 思否 · Zhihu 21 Aug a post there is meaningless without Chinese text
Qiita (JP) 22 Aug smaller audience, same requirement

So this is a prerequisite, not a nicety.

Why not a full translation

The English README is 830 lines and changes several times a week. A complete mirror would drift, and a stale Chinese README is worse than no Chinese README.

These are 220 lines each, carrying what a reader needs in order to decide: the positioning, quick start, the ten engines, install paths, where the paid line falls, and the test story. The deep sections (development databases, seed connections, deployment recipes) link to the English docs.

Two things that are not translations

Written for that audience specifically rather than carried over:

  • How Redis is mapped onto a SQL-shaped interface. SCAN over key prefixes, never KEYS *; INFO for health; SLOWLOG GET / CLIENT LIST for sessions. That kind of specificity lands well with these readers.
  • An explicit note that issues and PRs in Chinese or Japanese are welcome.

Also

The English README gains a language switcher (English · 简体中文 · 日本語). Without it neither file is reachable.

Every relative link in both files was checked against the tree. docs/, public/screenshots/, LICENSE and CONTRIBUTING.md all resolve.

What I would like reviewed

The Chinese, by someone who reads it. It was written without a native speaker in the loop. It should be technically correct and close to the register used on V2EX and 掘金, but naturalness is exactly what decides whether a HelloGitHub submission is accepted, and that is the one thing this PR cannot verify on its own. The Japanese carries the same caveat with a smaller bet behind it.

Deliberately left out

Neither file links to a live demo. app.libredb.org currently opens an SSO prompt, and sending this audience there would undo the point. The link goes in once #316 is deployed and demo.libredb.org is up.

Three of the channels we want to reach expect a README in their language
before they will consider a project: HelloGitHub's monthly issue, Ruan Yifeng's
weekly, and the V2EX/Juejin/Zhihu posts that follow from them. An
English-only repo is filtered out early, so this is a prerequisite rather than
a nicety.

Deliberately not a full translation. The English README is 830 lines and
changes several times a week; a complete mirror would drift, and a stale
Chinese README is worse than none. These carry the core a reader needs to
decide - the positioning, quick start, the ten engines, install paths, where
the paid line falls, and the test story - and send the deep sections
(development databases, seed connections, deployment recipes) to the English
docs.

Two additions rather than translations, aimed at that audience: how Redis is
mapped onto a SQL-shaped interface (SCAN over key prefixes, never KEYS *),
and an explicit note that issues and pull requests in Chinese or Japanese are
welcome.

The English README gains a language switcher, without which neither file is
reachable.
@kaya-abdullah
kaya-abdullah requested a review from cevheri August 8, 2026 00:44
House style for anything written into this repo: no emoji, no em dashes, no
--- separators. The two files went in carrying 18 em dashes and 18 rules
between them. Section headings already do the separating, and the dashes are
replaced with the punctuation the sentence actually wanted.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Adds concise Simplified Chinese and Japanese project introductions for regional developer communities.

Changes:

  • Adds localized quick starts, features, installation, and contribution guidance.
  • Documents Redis’s SQL-shaped interface.
  • Adds README language navigation.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
README.md Adds the language switcher.
README_zh.md Adds the Simplified Chinese README.
README_ja.md Adds the Japanese README.
Suppressed comments (4)

README_zh.md:111

  • The AI panel is rendered even when no API key is configured, and Ollama is intentionally valid without a key. This sentence therefore gives incorrect setup and UI expectations; distinguish providers that require keys instead.
**不配置密钥,这个面板根本不存在**,默认不会有任何数据离开你的网络。

README_zh.md:141

  • This promises an organization-wide query audit log, but query executions are not written to the server audit buffer: query_execution is only an unused event type, while the server currently records maintenance events. Remove this claim or implement centralized query auditing before advertising it.
7 个标签页的监控面板(概览、性能、查询、会话、表、存储、连接池)、时序趋势图、5-60 秒可调自动刷新、阈值告警配色,以及一键 `VACUUM` / `ANALYZE` / `REINDEX` / `UPDATE STATISTICS` / `DBCC CHECKDB` / `ALTER INDEX REBUILD`。全组织的查询审计日志一并提供。

README_ja.md:111

  • The AI panel is rendered even when no API key is configured, and Ollama is intentionally valid without a key. This sentence therefore gives incorrect setup and UI expectations; distinguish providers that require keys instead.
**キーを設定しなければ、このパネルは存在しません。** 既定では何もネットワークの外に出ません。

README_ja.md:141

  • This promises an organization-wide query audit log, but query executions are not written to the server audit buffer: query_execution is only an unused event type, while the server currently records maintenance events. Remove this claim or implement centralized query auditing before advertising it.
7タブのモニタリング(概要、パフォーマンス、クエリ、セッション、テーブル、ストレージ、コネクションプール)、時系列トレンドグラフ、5〜60秒で調整可能な自動更新、しきい値による色分けアラート、そしてワンクリックの `VACUUM` / `ANALYZE` / `REINDEX` / `UPDATE STATISTICS` / `DBCC CHECKDB` / `ALTER INDEX REBUILD`。組織全体のクエリ監査ログも含みます。

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread README_zh.md

### AI 助手(可选,用你自己的模型)

- **不绑定厂商**:默认 Gemini 2.5 Flash,同样支持 OpenAI、Claude,或 **本地模型**(Ollama / LM Studio)。
Comment thread README_ja.md

### AIアシスタント(任意・自分のモデルで)

- **ベンダー非依存**:既定はGemini 2.5 Flash。OpenAI、Claude、**ローカルLLM**(Ollama / LM Studio)にも対応。
Comment thread README_ja.md Outdated
これを本気で受け取ると、好みの問題ではなく仕様になります。

- データも同僚も自分のマシン上にはいないので、エディタはブラウザで動く必要がある。
- クエリが必要になる障害は、あなたがノートPCを開くまで待ってくれないので、スマートフォンから届く必要がある。
cevheri added 2 commits August 8, 2026 21:56
…lized READMEs

Review of #317 found that the abridgement dropped the Notes column of the
English install table, and several of the caveats it carried were load-bearing.
Four of seven install rows no longer worked as written:

- Homebrew was missing the one-time `brew trust libredb/tap`, which Homebrew 6+
  requires before it will install from the tap.
- Snap was missing `sudo`.
- Helm was `helm repo add`, which installs nothing. Replaced with the OCI
  one-liner the English README uses.
- deb/rpm was merged with the desktop AppImage. These are different artifacts:
  one is the systemd server package, the other runs the server as a local
  sidecar with no login prompt. Split, with the English "not the server package"
  warning restored, and the Flatpak given its own row since it comes from the
  FlatPark remote rather than the Releases page.

Corrected three claims that went further than the English source:

- "without an API key this panel does not exist" was false. The NL2SQL and
  Autopilot tabs render unconditionally; no NEXT_PUBLIC LLM variable exists, so
  the client cannot know whether a key is configured. The privacy property that
  is actually true - no key means no call, so nothing leaves the network - is
  now what the sentence says.
- The shared explorer/ER-diagram/schema-diff/monitoring set was claimed across
  all ten engines. README.md scopes it to the SQL engines and calls out Druid as
  a double exception; MongoDB and Redis have no ER diagram or schema diff.
- Migration SQL generation was unscoped. It covers PostgreSQL, MySQL, SQLite,
  Oracle and SQL Server, plus ClickHouse column modifications.

Restored three details the tables lost against README.md: `transactions` on the
Oracle and SQL Server rows, and the leading "none" on the Couchbase, ClickHouse
and Druid driver cells, which is where the zero-runtime-dependency position is
visible.

Added the AUTH_COOKIE_SECURE=false note to both quick starts. Reaching the app
over plain HTTP on a LAN makes login fail silently while health checks stay
green, and neither file carried an environment table or a link to
docs/DISTRIBUTION.md where the fix lives.

Japanese fixes: "スマートフォンから届く" inverted the direction of the English
"it has to reach a phone"; the specification bullet list mixed plain and polite
forms in its last item; `INFER` is column inference, not type inference.
The previous commit reintroduced eleven em dashes, which 1f5f5f6 had just
finished removing from these two files. Replaced with the punctuation each
sentence actually wanted: parentheses for the parenthetical lists, a semicolon
for the Couchbase aside, a full stop before the desktop-app explanation.

The driver cells now say "no driver, HTTP only" outright instead of leaning on
a dash to carry the contrast.
@cevheri

cevheri commented Aug 8, 2026

Copy link
Copy Markdown
Member

Reviewed and pushed the fixes onto this branch (fd7358a, 22b6115). The translation itself is good — the Chinese reads like it was written for V2EX rather than translated at one, every relative link resolves, and the numbers (ten engines, 8 charts, 5 aggregations, 30+ inferences, 100% coverage, six test layers, the Node 20.9/22/24 smoke matrix, all eleven one-click channels) check out against the English README and distribution/channels.yaml.

What needed fixing came from one root cause: the abridgement dropped the Notes column of the English install table, and several caveats that column carried were load-bearing.

Install commands that did not work as written. Homebrew was missing the one-time brew trust libredb/tap that Homebrew 6+ requires; Snap was missing sudo; Helm was helm repo add, which installs nothing. The deb/rpm row was merged with the desktop AppImage — those are different artifacts, and the English table carries an explicit "not the server package" warning for exactly that reason. Split, with the Flatpak given its own row since it comes from the FlatPark remote, not the Releases page.

Three claims that went further than the English source.

  • "Without an API key this panel does not exist" is not true. The NL2SQL and Autopilot tabs render unconditionally, and no NEXT_PUBLIC_ LLM variable exists, so the client has no way to know whether a key is configured — a reader clicks through and gets a server-side LLMConfigError. The property that is true, and is the one worth stating to this audience, is that no key means no call, so nothing leaves the network. That is what it says now.
  • The shared explorer / ER diagram / schema diff / monitoring set was claimed across all ten engines. README.md scopes it to the SQL engines and calls out Druid as a double exception; MongoDB and Redis have neither ER diagrams nor schema diff.
  • Migration SQL generation was unscoped; it covers PostgreSQL, MySQL, SQLite, Oracle and SQL Server, plus ClickHouse column modifications.

Details the tables lost. transactions was dropped from the Oracle and SQL Server rows while PostgreSQL and MySQL kept it, which reads as if the two enterprise engines have no transaction control. And the leading "none" was dropped from the Couchbase, ClickHouse and Druid driver cells — that is where the zero-runtime-dependency position is visible, and next to pg and mysql2 a bare "HTTP" just looks like a transport. Both restored.

One addition. Both quick starts now carry the AUTH_COOKIE_SECURE=false note. Reaching the app over plain HTTP on a LAN makes login fail silently while health checks stay green — it has caught three distribution channels already — and neither file had an environment table or a link to docs/DISTRIBUTION.md where the fix lives. Added that link too, so a reader whose Homebrew or Snap install fails has somewhere to go in-language.

Japanese. Three real ones: スマートフォンから届く inverted the direction of "it has to reach a phone"; the specification bullet list mixed plain and polite forms in its final item; and INFER is column inference, not type inference (the Chinese had this right).

Note that 22b6115 exists because my first commit reintroduced eleven em dashes that 1f5f5f6 had just removed. Sorry about the noise.

Two things I did not touch, because they are yours to decide:

  1. "Issues and PRs in Chinese or Japanese are welcome." That policy is stated nowhere else — CONTRIBUTING.md and every issue and PR template have no language policy at all, and the standing convention for public repo artifacts is English. Right now the promise is visible only in the two files a maintainer cannot read. Either mirror it into CONTRIBUTING.md and the templates, or drop the sentence.
  2. No drift guard. The engine list and install table are now hardcoded in three READMEs. package.json has coverage:check, chart:check and distribution:check but nothing for this, and Phase 21 (Trino) will land an eleventh engine and leave both localized files claiming ten. A small readme:check asserting the engine rows and install commands match README.md would close it.

Separately, and not a defect in this PR: the English engine table lists SSL/TLS and SSH tunnel only on the PostgreSQL and MySQL rows, and both translations faithfully carried that over. ConnectionModal.tsx gates both panels on !isFileBased(type), so every engine except SQLite has them. That wants fixing in all three files at once.

@sonarqubecloud

sonarqubecloud Bot commented Aug 8, 2026

Copy link
Copy Markdown

@cevheri
cevheri merged commit 8f97127 into main Aug 8, 2026
15 checks passed
@cevheri
cevheri deleted the docs/localized-readmes branch August 8, 2026 19:11
cevheri added a commit that referenced this pull request Aug 8, 2026
… the transport-security scope (#318)

* docs: guard the localized READMEs, state the language policy, correct the transport-security scope

Three follow-ups from the #317 review, none of which belonged in that PR.

Localized README drift guard. README_zh.md and README_ja.md restate README.md's
engine table and install commands, and nothing noticed when they diverged -
that is how #317 reached review with a Homebrew row missing its mandatory
`brew trust`, a Snap row missing `sudo`, and a Helm row that added a repo
without installing anything. `bun run readme:check` enforces two invariants:
the engine name set is identical in all three files, and every command in a
localized install table appears verbatim in README.md's. Abridgement stays
legal - the translations deliberately drop Chocolatey and the portable zip -
but paraphrasing a command does not, because a reader copy-pastes it. Tables
are located structurally rather than by heading text, since the headings are in
Chinese and Japanese. Wired into the required lint-and-build job for the same
reason the chart guard lives there: a separate job would be advisory only.

Language policy. The translated READMEs invite issues and pull requests in
Chinese and Japanese, which was stated nowhere else - CONTRIBUTING.md and the
issue and PR templates carried no language policy at all, so the promise was
visible only in the two files a maintainer cannot read. CONTRIBUTING.md now
states it, and draws the line the repo actually holds: the conversation may be
in any of the three languages, but everything that lands in the tree stays in
English apart from the translated READMEs themselves.

Transport security scope. All three READMEs listed SSL/TLS and SSH tunnel on
the PostgreSQL and MySQL rows only, which reads as if the other engines have
neither. Neither half was right. The SSH tunnel is opened in factory.ts before
createDatabaseProvider and rewrites host and port, so it is provider-independent
and works everywhere except SQLite. SSL/TLS is narrower than the dialog implies:
postgres, mysql, mssql, couchbase, clickhouse and druid read config.ssl;
oracle.ts, mongodb.ts and redis.ts never do. Replaced the per-row claims with
one note per file stating both scopes, and recorded the UI half - a panel that
accepts a security setting three providers silently drop - as D2 in
docs/BACKLOG.md.

* docs: narrow the transport-security claim and read only the command column

All five Copilot findings on #318 were valid.

commandSpans scanned every cell, so README.md's Notes column put `brew update`
and `sudo snap logs libredb-studio` into the canonical set. A localized file
could then have carried either in its Command cell and passed. It now reads
column 1 only, which is where both table shapes keep the command, with a
regression test for a note-only span and one for a row that has no such column.

The transport-security note overstated both halves, which matters more than
usual because the subject is a security setting.

The SSH tunnel is provider-independent, but `factory.ts:229` requires a host
and a port, and connection string mode clears both in
`use-connection-form.ts:173-179`. That mode is offered for MongoDB, Couchbase
and ClickHouse, so those connections are not tunnelled even though the panel
appears. "Every engine except SQLite" was also wrong on its own terms: the
embedded `libredb` provider is file-based too.

More importantly, saying Oracle, MongoDB and Redis "connect without SSL/TLS"
claimed more than the code supports. What is true is that those three ignore
`config.ssl`; the connection may still be encrypted if the connection string
asks for it - `oracle.ts:266` passes a supplied string through verbatim, and
the MongoDB driver honours `tls=true` in the URI. The defect is a security
setting accepted and silently dropped, not guaranteed plaintext. Reworded in
all three READMEs and in BACKLOG D2, which now also records the two scope
facts so the next reader does not have to re-derive them.
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.

3 participants