diff --git a/.roo/commands/roo-resolve-conflicts.md b/.roo/commands/roo-resolve-conflicts.md
index 38b2038658..4a3a80bdd3 100644
--- a/.roo/commands/roo-resolve-conflicts.md
+++ b/.roo/commands/roo-resolve-conflicts.md
@@ -11,10 +11,10 @@ Resolve merge conflicts for a specific pull request by analyzing git history, co
1. **Provide a PR number** (e.g., `#123` or just `123`)
2. The workflow will automatically:
- - Fetch PR information (title, description, branches)
- - Checkout the PR branch
- - Rebase onto the target branch to reveal conflicts
- - Analyze and resolve conflicts using git history
+ - Fetch PR information (title, description, branches)
+ - Checkout the PR branch
+ - Rebase onto the target branch to reveal conflicts
+ - Analyze and resolve conflicts using git history
## Workflow Steps
@@ -39,7 +39,6 @@ git status --porcelain | grep "^UU"
### 3. Analyze Each Conflict
For each conflicted file:
-
- Read the conflict markers
- Run `git blame` on conflicting sections
- Fetch commit messages for context
@@ -48,7 +47,6 @@ For each conflicted file:
### 4. Apply Resolution Strategy
Based on the analysis:
-
- **Bugfixes** generally take precedence over features
- **Recent changes** are often more relevant (unless older is a security fix)
- **Combine** non-conflicting changes when possible
diff --git a/.roo/commands/roo-translate.md b/.roo/commands/roo-translate.md
index 28a8dc67c8..3f97494894 100644
--- a/.roo/commands/roo-translate.md
+++ b/.roo/commands/roo-translate.md
@@ -9,35 +9,32 @@ Perform translation and localization tasks for the Roo Code extension. This comm
## Quick Start
1. **Identify the translation scope:**
-
- - If a specific language code is provided (e.g., `de`, `zh-CN`), focus on that language
- - If `all` is specified, translate to all supported languages
- - If a string key is provided, locate and translate that specific string
- - If a file path is provided, work with that translation file
+ - If a specific language code is provided (e.g., `de`, `zh-CN`), focus on that language
+ - If `all` is specified, translate to all supported languages
+ - If a string key is provided, locate and translate that specific string
+ - If a file path is provided, work with that translation file
2. **Supported languages:** ca, de, en, es, fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW
3. **Translation locations:**
- - Core Extension: `src/i18n/locales/`
- - WebView UI: `webview-ui/src/i18n/locales/`
+ - Core Extension: `src/i18n/locales/`
+ - WebView UI: `webview-ui/src/i18n/locales/`
## Workflow
1. If adding new strings:
-
- - Add the English string first
- - Ask for confirmation before translating to other languages
- - Use `apply_diff` for efficient file updates
+ - Add the English string first
+ - Ask for confirmation before translating to other languages
+ - Use `apply_diff` for efficient file updates
2. If updating existing strings:
-
- - Identify all affected language files
- - Update English first, then propagate changes
+ - Identify all affected language files
+ - Update English first, then propagate changes
3. Validate your changes:
- ```bash
- node scripts/find-missing-translations.js
- ```
+ ```bash
+ node scripts/find-missing-translations.js
+ ```
## Key Guidelines
diff --git a/.roo/skills/roo-conflict-resolution/SKILL.md b/.roo/skills/roo-conflict-resolution/SKILL.md
index 4807180522..7b123a8107 100644
--- a/.roo/skills/roo-conflict-resolution/SKILL.md
+++ b/.roo/skills/roo-conflict-resolution/SKILL.md
@@ -105,16 +105,16 @@ Verify the resolution and prepare for commit:
## Git Commands Reference
-| Command | Purpose |
-| ---------------------------------------------------------------- | ------------------------------------------------- |
-| `gh pr checkout [PR_NUMBER] --force` | Force checkout the PR branch |
-| `git fetch origin main` | Get the latest main branch |
-| `GIT_EDITOR=true git rebase origin/main` | Rebase current branch onto main (non-interactive) |
-| `git blame -L [start],[end] [commit] -- [file]` | Get commit information for specific lines |
-| `git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha]` | Get commit metadata |
-| `git show [sha] -- [file]` | Get the actual changes made in a commit |
-| `git ls-files -u` | List unmerged files with stage information |
-| `GIT_EDITOR=true git rebase --continue` | Continue rebase after resolving conflicts |
+| Command | Purpose |
+|---------|---------|
+| `gh pr checkout [PR_NUMBER] --force` | Force checkout the PR branch |
+| `git fetch origin main` | Get the latest main branch |
+| `GIT_EDITOR=true git rebase origin/main` | Rebase current branch onto main (non-interactive) |
+| `git blame -L [start],[end] [commit] -- [file]` | Get commit information for specific lines |
+| `git show --format="%H%n%an%n%ae%n%ad%n%s%n%b" --no-patch [sha]` | Get commit metadata |
+| `git show [sha] -- [file]` | Get the actual changes made in a commit |
+| `git ls-files -u` | List unmerged files with stage information |
+| `GIT_EDITOR=true git rebase --continue` | Continue rebase after resolving conflicts |
## Best Practices
@@ -141,12 +141,12 @@ Look beyond the immediate conflict to understand related changes in tests, docum
## Resolution Heuristics
-| Category | Rule | Exception |
-| ------------------- | -------------------------------------------------- | --------------------------------------- |
-| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
-| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
-| Test Updates | Changes with test updates are likely more complete | - |
-| Formatting vs Logic | Logic changes take precedence over formatting | - |
+| Category | Rule | Exception |
+|----------|------|-----------|
+| Bugfix vs Feature | Bugfixes generally take precedence | When features include the fix |
+| Recent vs Old | More recent changes are often more relevant | When older changes are security patches |
+| Test Updates | Changes with test updates are likely more complete | - |
+| Formatting vs Logic | Logic changes take precedence over formatting | - |
## Common Pitfalls
diff --git a/.roo/skills/roo-translation/SKILL.md b/.roo/skills/roo-translation/SKILL.md
index dafffb78c9..2660e39ba9 100644
--- a/.roo/skills/roo-translation/SKILL.md
+++ b/.roo/skills/roo-translation/SKILL.md
@@ -29,10 +29,10 @@ Localize all strings into the following locale files: ca, de, en, es, fr, hi, id
The VSCode extension has two main areas that require localization:
-| Component | Path | Purpose |
-| ------------------ | ------------------------------ | ------------------------- |
-| **Core Extension** | `src/i18n/locales/` | Extension backend strings |
-| **WebView UI** | `webview-ui/src/i18n/locales/` | User interface strings |
+| Component | Path | Purpose |
+|-----------|------|---------|
+| **Core Extension** | `src/i18n/locales/` | Extension backend strings |
+| **WebView UI** | `webview-ui/src/i18n/locales/` | User interface strings |
## Brand Voice, Tone, and Word Choice
@@ -77,19 +77,17 @@ This guidance file is loaded at runtime and should be consulted for the latest b
### Trans Component Example
Translation string:
-
```json
"changeSettings": "You can always change this at the bottom of the settings"
```
React component usage:
-
```tsx
,
- }}
+ i18nKey="welcome:telemetry.changeSettings"
+ components={{
+ settingsLink:
+ }}
/>
```
@@ -107,21 +105,19 @@ React component usage:
1. First add or modify English strings, then ask for confirmation before translating to all other languages
2. Use this process for each localization task:
-
- 1. Identify where the string appears in the UI/codebase
- 2. Understand the context and purpose of the string
- 3. Update English translation first
- 4. Use the `search_files` tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for `apply_diff` SEARCH context
- 5. Create appropriate translations for all other supported languages utilizing the `search_files` result using `apply_diff` without reading every file
- 6. Do not output the translated text into the chat, just modify the files
- 7. Validate your changes with the missing translations script
+ 1. Identify where the string appears in the UI/codebase
+ 2. Understand the context and purpose of the string
+ 3. Update English translation first
+ 4. Use the `search_files` tool to find JSON keys that are near new keys in English translations but do not yet exist in the other language files for `apply_diff` SEARCH context
+ 5. Create appropriate translations for all other supported languages utilizing the `search_files` result using `apply_diff` without reading every file
+ 6. Do not output the translated text into the chat, just modify the files
+ 7. Validate your changes with the missing translations script
3. Flag or comment if an English source string is incomplete ("please see this...") to avoid truncated or unclear translations
4. For UI elements, distinguish between:
-
- - Button labels: Use short imperative commands ("Save", "Cancel")
- - Tooltip text: Can be slightly more descriptive
+ - Button labels: Use short imperative commands ("Save", "Cancel")
+ - Tooltip text: Can be slightly more descriptive
5. Preserve the original perspective: If text is a user command directed at the software, ensure the translation maintains this direction
diff --git a/README.md b/README.md
index 31391b2c20..6f024db235 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,7 @@
- [简体中文](locales/zh-CN/README.md)
- [繁體中文](locales/zh-TW/README.md)
- ...
-
+
---
diff --git a/apps/web-roo-code/src/app/pricing/page.tsx b/apps/web-roo-code/src/app/pricing/page.tsx
index 6851b47b6a..a46b5c67cc 100644
--- a/apps/web-roo-code/src/app/pricing/page.tsx
+++ b/apps/web-roo-code/src/app/pricing/page.tsx
@@ -291,7 +291,11 @@ export default function PricingPage() {
To pay for Cloud Agents running time (${PRICE_CREDITS}/hour)
To pay for AI model inference costs (
-
+
varies by model
)
diff --git a/flake.lock b/flake.lock
deleted file mode 100644
index 5a9df81916..0000000000
--- a/flake.lock
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "nodes": {
- "flake-utils": {
- "inputs": {
- "systems": "systems"
- },
- "locked": {
- "lastModified": 1731533236,
- "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
- "owner": "numtide",
- "repo": "flake-utils",
- "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
- "type": "github"
- },
- "original": {
- "owner": "numtide",
- "repo": "flake-utils",
- "type": "github"
- }
- },
- "nixpkgs": {
- "locked": {
- "lastModified": 1768564909,
- "narHash": "sha256-Kell/SpJYVkHWMvnhqJz/8DqQg2b6PguxVWOuadbHCc=",
- "owner": "NixOS",
- "repo": "nixpkgs",
- "rev": "e4bae1bd10c9c57b2cf517953ab70060a828ee6f",
- "type": "github"
- },
- "original": {
- "owner": "NixOS",
- "ref": "nixos-unstable",
- "repo": "nixpkgs",
- "type": "github"
- }
- },
- "root": {
- "inputs": {
- "flake-utils": "flake-utils",
- "nixpkgs": "nixpkgs"
- }
- },
- "systems": {
- "locked": {
- "lastModified": 1681028828,
- "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
- "owner": "nix-systems",
- "repo": "default",
- "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
- "type": "github"
- },
- "original": {
- "owner": "nix-systems",
- "repo": "default",
- "type": "github"
- }
- }
- },
- "root": "root",
- "version": 7
-}
diff --git a/flake.nix b/flake.nix
deleted file mode 100644
index 1d1bd1736a..0000000000
--- a/flake.nix
+++ /dev/null
@@ -1,375 +0,0 @@
-# Roo Code Nix Flake
-#
-# Provides a reproducible development environment
-#
-# Usage:
-# nix develop # Enter dev shell
-# nix run # Show welcome banner
-# nix fmt # Format nix files
-# nix flake check # Run all checks (lint, typecheck, test)
-#
-# Build and install extension:
-# nix build .#vsix && code --install-extension result/*.vsix
-#
-# Inside dev shell:
-# pnpm install # Install npm packages
-# pnpm build # Build the project
-# pnpm test # Run tests
-# pnpm vsix # Create VS Code extension
-# eslint # Lint files (eslint and eslint_d available)
-# pnpm lint # Run linting via pnpm scripts
-#
-# Maintenance:
-# nix run .#update-deps # Update flake.lock and pnpmDeps hash
-#
-# If flakes aren't enabled, prefix commands with:
-# nix --extra-experimental-features 'nix-command flakes'
-#
-# See README.md section "Nix Flake" for more information
-
-{
- description = "Roo Code - AI-Powered Dev Team, Right in Your Editor";
-
- inputs = {
- nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
- flake-utils.url = "github:numtide/flake-utils";
- };
-
- outputs =
- {
- self,
- nixpkgs,
- flake-utils,
- }:
- let
- versionFromPackageJson = (builtins.fromJSON (builtins.readFile ./src/package.json)).version;
-
- in
- flake-utils.lib.eachDefaultSystem (
- system:
- let
- pkgs = nixpkgs.legacyPackages.${system};
- lib = pkgs.lib;
-
- nodejs = pkgs.nodejs_20;
- # Use pnpm_9 if available, otherwise fall back to pnpm
- # pnpm 10.26.1 is available and newer than required 10.8.1, so we'll use that
- pnpm = pkgs.pnpm;
-
- ignoredPaths = [
- ".direnv"
- "result"
- "result-dev"
- "node_modules"
- ".turbo"
- "dist"
- "bin"
- ".vscode"
- ".cursor"
- ];
-
- src = lib.cleanSourceWith {
- src = lib.cleanSource ./.;
- filter =
- path: type:
- let
- baseName = builtins.baseNameOf path;
- in
- !(builtins.elem baseName ignoredPaths);
- };
-
- # Chromium is only available on Linux in nixpkgs
- chromiumPath = if pkgs.stdenv.isLinux then "${pkgs.chromium}/bin/chromium" else null;
-
- basePnpmAttrs = {
- inherit src;
- strictDeps = true;
- nativeBuildInputs = [
- nodejs
- pnpm
- pkgs.pnpmConfigHook
- ];
- pnpmDeps = self.packages.${system}.pnpmDeps;
- };
-
- roo-code-welcome = pkgs.writeShellApplication {
- name = "roo-code-welcome";
- runtimeInputs = [
- pkgs.jp2a
- nodejs
- pnpm
- ];
- text = ''
- echo ""
- if [ -f "./src/assets/images/roo.png" ]; then
- jp2a --colors --width=40 ./src/assets/images/roo.png 2>/dev/null || echo "🦘 Roo Code"
- else
- echo "🦘 Roo Code Development Environment"
- fi
- echo ""
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
- echo "Node.js: $(node --version)"
- echo "pnpm: $(pnpm --version)"
- echo ""
- echo "📦 pnpm install - Install dependencies"
- echo "🔧 pnpm build - Build the project"
- echo "📋 pnpm test - Run tests (from root)"
- echo "📦 pnpm vsix - Create VS Code extension"
- echo ""
- echo "💡 Tip: For webview-ui tests, run from webview-ui directory:"
- echo " cd webview-ui && pnpm test "
- echo ""
- echo "For VS Code debugging: Press F5"
- echo ""
- '';
- };
-
- mkPnpmCheck =
- name: script: extraAttrs:
- pkgs.stdenvNoCC.mkDerivation (
- basePnpmAttrs
- // {
- name = "roo-code-${name}";
- buildPhase = ''
- runHook preBuild
- export HOME=$TMPDIR
- # Disable pnpm self-management (pnpm is provided by Nix)
- echo "manage-package-manager-versions=false" >> .npmrc
- pnpm run ${script}
- runHook postBuild
- '';
- installPhase = ''
- mkdir -p $out
- echo "${name} passed" > $out/result
- '';
- }
- // extraAttrs
- );
-
- in
- {
- formatter = pkgs.nixfmt-tree;
-
- devShells.default = pkgs.mkShell {
- name = "roo-code-dev";
-
- packages =
- with pkgs;
- [
- nodejs
- pnpm
- git
- python3
- pkg-config
- gnumake
- # turbo is installed via pnpm as a devDependency (version 2.7.6 in package.json)
- # We don't include system turbo to avoid version conflicts
- # Users should run 'pnpm install' first to get the correct turbo version
- ripgrep
- jp2a
- nodePackages.typescript-language-server
- nodePackages.eslint
- nodePackages.eslint_d
- nil
- ]
- ++ lib.optionals stdenv.isLinux [
- chromium
- ];
-
- buildInputs =
- with pkgs;
- [
- openssl
- ]
- ++ lib.optionals stdenv.isLinux [
- stdenv.cc.cc.lib
- ];
-
- env = {
- PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1";
- RIPGREP_PATH = "${pkgs.ripgrep}/bin/rg";
- NODE_ENV = "development";
- }
- // lib.optionalAttrs pkgs.stdenv.isLinux {
- PUPPETEER_EXECUTABLE_PATH = chromiumPath;
- };
-
- shellHook = ''
- ${lib.getExe roo-code-welcome}
- '';
- };
-
- packages =
- let
- version = versionFromPackageJson;
- in
- {
- # Pre-fetch pnpm dependencies (for reproducible builds)
- # Update hash when pnpm-lock.yaml changes:
- # 1. Set hash = lib.fakeHash;
- # 2. Run: nix build .#pnpmDeps
- # 3. Copy the "got:" hash from the error message
- pnpmDeps = pkgs.fetchPnpmDeps {
- pname = "roo-code-pnpm-deps";
- inherit version src;
- fetcherVersion = 2;
- hash = "sha256-l6MAzyVUiiqiKLvacP0tZZs4WNlcmm3TrtRwauE3TLE=";
- };
-
- vsix = pkgs.stdenvNoCC.mkDerivation (
- basePnpmAttrs
- // {
- pname = "roo-code-vsix";
- inherit version;
-
- buildPhase = ''
- runHook preBuild
- export HOME=$TMPDIR
- # Disable pnpm self-management (pnpm is provided by Nix)
- echo "manage-package-manager-versions=false" >> .npmrc
- pnpm run vsix
- runHook postBuild
- '';
-
- installPhase = ''
- runHook preInstall
- mkdir -p $out
- cp -v bin/*.vsix $out/
- runHook postInstall
- '';
-
- meta = with lib; {
- description = "AI-powered autonomous coding agent that lives in your editor";
- homepage = "https://github.com/RooCodeInc/Roo-Code";
- license = licenses.asl20;
- platforms = platforms.unix;
- };
- }
- );
-
- default = self.packages.${system}.vsix;
- };
-
- apps = {
- welcome = {
- type = "app";
- program = lib.getExe roo-code-welcome;
- };
-
- build-vsix = {
- type = "app";
- program = lib.getExe (
- pkgs.writeShellApplication {
- name = "build-vsix";
- text = ''
- echo "Building VSIX..."
- nix build .#vsix --print-out-paths
- '';
- }
- );
- };
-
- update-deps = {
- type = "app";
- program = lib.getExe (
- pkgs.writeShellApplication {
- name = "update-deps";
- runtimeInputs = [
- pkgs.gnused
- pkgs.gnugrep
- ];
- text = ''
- # Safety check: ensure flake.nix has no uncommitted changes
- if ! git diff --quiet flake.nix 2>/dev/null; then
- echo "Error: flake.nix has uncommitted changes. Commit or stash them first."
- exit 1
- fi
-
- echo "==> Updating flake inputs (nixpkgs, flake-utils)..."
- nix flake update
-
- echo ""
- echo "==> Updating pnpmDeps hash..."
-
- # Set hash to empty to trigger rebuild
- sed -i 's|hash = "sha256-[^"]*";|hash = "";|' flake.nix
-
- # Build and capture the error output
- if output=$(nix build .#pnpmDeps 2>&1); then
- echo "Build succeeded - hash unchanged"
- # Restore the original hash since build succeeded
- git checkout flake.nix 2>/dev/null || true
- exit 0
- fi
-
- # Extract the correct hash from "got: sha256-..." (with fallback patterns)
- new_hash=$(echo "$output" | grep -oP 'got:\s+\Ksha256-[A-Za-z0-9+/=]+' | head -1)
-
- # Fallback: try alternative pattern if first didn't match
- if [ -z "$new_hash" ]; then
- new_hash=$(echo "$output" | grep -oE 'sha256-[A-Za-z0-9+/=]+' | tail -1)
- fi
-
- if [ -z "$new_hash" ]; then
- echo "Error: Could not extract hash from build output"
- echo "$output"
- # Restore flake.nix since we failed
- git checkout flake.nix 2>/dev/null || true
- exit 1
- fi
-
- # Update flake.nix with the new hash
- sed -i "s|hash = \"\";|hash = \"$new_hash\";|" flake.nix
-
- echo "Updated pnpmDeps hash to: $new_hash"
- echo ""
- echo "Run 'nix fmt' to format, then commit flake.nix and flake.lock"
- '';
- }
- );
- };
-
- default = self.apps.${system}.welcome;
- };
-
- checks = {
- lint = mkPnpmCheck "lint" "lint" { };
- typecheck = mkPnpmCheck "typecheck" "check-types" { };
- test = mkPnpmCheck "test" "test" (
- {
- CI = "true";
- PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "1";
- }
- // lib.optionalAttrs pkgs.stdenv.isLinux {
- nativeBuildInputs = basePnpmAttrs.nativeBuildInputs ++ [ pkgs.chromium ];
- PUPPETEER_EXECUTABLE_PATH = chromiumPath;
- }
- );
-
- format = pkgs.stdenvNoCC.mkDerivation {
- name = "roo-code-format-check";
- src = ./.;
- strictDeps = true;
-
- nativeBuildInputs = [ pkgs.nixfmt-tree ];
-
- buildPhase = ''
- runHook preBuild
- nixfmt --check flake.nix
- runHook postBuild
- '';
-
- installPhase = ''
- mkdir -p $out
- echo "Format check passed" > $out/result
- '';
- };
- };
- }
- )
- // {
- overlays.default = final: prev: {
- roo-code-vsix = self.packages.${final.system}.vsix;
- };
- };
-}
diff --git a/locales/ca/README.md b/locales/ca/README.md
index 31412494ea..be4aae4cc0 100644
--- a/locales/ca/README.md
+++ b/locales/ca/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/de/README.md b/locales/de/README.md
index d55d84abb3..634996646d 100644
--- a/locales/de/README.md
+++ b/locales/de/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/es/README.md b/locales/es/README.md
index f044c3ef92..6764151149 100644
--- a/locales/es/README.md
+++ b/locales/es/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/fr/README.md b/locales/fr/README.md
index f8596d0dd2..36e693f041 100644
--- a/locales/fr/README.md
+++ b/locales/fr/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/hi/README.md b/locales/hi/README.md
index 58d05ad3f0..27cb624213 100644
--- a/locales/hi/README.md
+++ b/locales/hi/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/id/README.md b/locales/id/README.md
index 872c393e84..0d208c18a3 100644
--- a/locales/id/README.md
+++ b/locales/id/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/it/README.md b/locales/it/README.md
index eaf6843a2c..69a7393967 100644
--- a/locales/it/README.md
+++ b/locales/it/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ja/README.md b/locales/ja/README.md
index 8217fe2e5f..dd5332b961 100644
--- a/locales/ja/README.md
+++ b/locales/ja/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ko/README.md b/locales/ko/README.md
index 133fa31525..1070244b78 100644
--- a/locales/ko/README.md
+++ b/locales/ko/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/nl/README.md b/locales/nl/README.md
index 4ab74bb297..52e7138f8c 100644
--- a/locales/nl/README.md
+++ b/locales/nl/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/pl/README.md b/locales/pl/README.md
index c1aa50257f..8f79597598 100644
--- a/locales/pl/README.md
+++ b/locales/pl/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/pt-BR/README.md b/locales/pt-BR/README.md
index def50a82f9..50269e00ed 100644
--- a/locales/pt-BR/README.md
+++ b/locales/pt-BR/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/ru/README.md b/locales/ru/README.md
index 161cfd8d49..a323ff417c 100644
--- a/locales/ru/README.md
+++ b/locales/ru/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/tr/README.md b/locales/tr/README.md
index a9a52fa175..2847a23c06 100644
--- a/locales/tr/README.md
+++ b/locales/tr/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/vi/README.md b/locales/vi/README.md
index cbe82367b1..aa9b4ff674 100644
--- a/locales/vi/README.md
+++ b/locales/vi/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/zh-CN/README.md b/locales/zh-CN/README.md
index b88ad8d897..ef26871f31 100644
--- a/locales/zh-CN/README.md
+++ b/locales/zh-CN/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---
diff --git a/locales/zh-TW/README.md b/locales/zh-TW/README.md
index 243abb22f2..db94c425c9 100644
--- a/locales/zh-TW/README.md
+++ b/locales/zh-TW/README.md
@@ -35,7 +35,7 @@
- [简体中文](../zh-CN/README.md)
- [繁體中文](../zh-TW/README.md)
- ...
-
+
---