83 lines
2.6 KiB
Bash
Executable File
83 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
||
# Check for hardcoded Russian/Cyrillic user-facing strings in source code.
|
||
# Excludes locale files, docs, tests with explicit locale checks.
|
||
|
||
set -e
|
||
|
||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||
EXIT=0
|
||
|
||
# Find Cyrillic characters in source files, excluding allowed paths.
|
||
# The regex matches any Cyrillic character range.
|
||
# Allowed exceptions:
|
||
# - locale files (*/i18n/locales/*)
|
||
# - docs/*
|
||
# - README*
|
||
# - spaces/
|
||
# - .json files that are templates or configs
|
||
# - .md files
|
||
|
||
echo "=== Checking for hardcoded Cyrillic in source code ==="
|
||
|
||
# Search for Cyrillic characters in Go files (excluding locale files)
|
||
GO_CYRILLIC=$(find "$ROOT" -name '*.go' \
|
||
! -path "*/i18n/locales/*" \
|
||
-exec grep -l '[А-Яа-я]' {} \; 2>/dev/null || true)
|
||
|
||
if [ -n "$GO_CYRILLIC" ]; then
|
||
echo "WARNING: Cyrillic found in Go files (expected in server HTML templates for now):"
|
||
echo "$GO_CYRILLIC"
|
||
# Don't fail for Go files with HTML templates — they'll be refactored later
|
||
fi
|
||
|
||
# Search for Cyrillic in Svelte/JS files (excluding locale files)
|
||
JS_CYRILLIC=$(find "$ROOT/frontend/src" -name '*.svelte' -o -name '*.js' | \
|
||
grep -v 'i18n/locales' | \
|
||
xargs grep -l '[А-Яа-я]' 2>/dev/null || true)
|
||
|
||
if [ -n "$JS_CYRILLIC" ]; then
|
||
echo ""
|
||
echo "FAIL: Cyrillic found in frontend source files (outside locale files):"
|
||
echo "$JS_CYRILLIC"
|
||
echo ""
|
||
echo "These should use t() from lib/i18n instead."
|
||
EXIT=1
|
||
fi
|
||
|
||
# Check for common bidi/control unicode characters
|
||
echo ""
|
||
echo "=== Checking for bidi/control Unicode characters ==="
|
||
BIDI=$(find "$ROOT" -name '*.go' -o -name '*.svelte' -o -name '*.js' | \
|
||
xargs grep -Pl '[\x{202A}-\x{202E}\x{2066}-\x{2069}\x{200E}\x{200F}\x{061C}]' 2>/dev/null || true)
|
||
|
||
if [ -n "$BIDI" ]; then
|
||
echo "FAIL: Bidi/control Unicode characters found in:"
|
||
echo "$BIDI"
|
||
EXIT=1
|
||
else
|
||
echo "OK: No bidi/control characters found"
|
||
fi
|
||
|
||
# Check that locale keys in ru.js and en.js match
|
||
echo ""
|
||
echo "=== Checking locale key consistency ==="
|
||
RU_KEYS=$(grep -oP "^\s+'[^']+'" "$ROOT/frontend/src/lib/i18n/locales/ru.js" | sed "s/^ *'//;s/'$//" | sort)
|
||
EN_KEYS=$(grep -oP "^\s+'[^']+'" "$ROOT/frontend/src/lib/i18n/locales/en.js" | sed "s/^ *'//;s/'$//" | sort)
|
||
|
||
MISSING_EN=$(comm -23 <(echo "$RU_KEYS") <(echo "$EN_KEYS"))
|
||
MISSING_RU=$(comm -23 <(echo "$EN_KEYS") <(echo "$RU_KEYS"))
|
||
|
||
if [ -n "$MISSING_EN" ]; then
|
||
echo "WARNING: Keys in ru.js but missing in en.js:"
|
||
echo "$MISSING_EN"
|
||
fi
|
||
if [ -n "$MISSING_RU" ]; then
|
||
echo "WARNING: Keys in en.js but missing in ru.js:"
|
||
echo "$MISSING_RU"
|
||
fi
|
||
if [ -z "$MISSING_EN" ] && [ -z "$MISSING_RU" ]; then
|
||
echo "OK: All locale keys match between ru.js and en.js"
|
||
fi
|
||
|
||
exit $EXIT
|