-
-
Notifications
You must be signed in to change notification settings - Fork 636
feat(i18n): add Indonesian (id) locale #670
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,324 @@ | ||
| buttons: | ||
| create: | ||
| emoji: 🎫 | ||
| text: Buat Tiket | ||
| edit: | ||
| emoji: ✏️ | ||
| text: Edit | ||
| reject_close_request: | ||
| emoji: ✖️ | ||
| text: Tolak | ||
| unclaim: | ||
| emoji: ♻️ | ||
| text: Lepas Penugasan | ||
| accept_close_request: | ||
| emoji: ✅ | ||
| text: Terima | ||
| cancel: | ||
| emoji: ➖ | ||
| text: Batal | ||
| claim: | ||
| emoji: 🙌 | ||
| text: Ambil Tiket | ||
| close: | ||
| emoji: ✖️ | ||
| text: Tutup | ||
| confirm_open: | ||
| emoji: ✅ | ||
| text: Buat Tiket | ||
|
|
||
| commands: | ||
| message: | ||
| create: | ||
| name: Buat tiket dari pesan | ||
| pin: | ||
| not_ticket: | ||
| title: ❌ Bukan Channel Tiket | ||
| description: Pesan hanya dapat disematkan di channel tiket. | ||
| not_pinnable: | ||
| title: ❌ Error | ||
| description: "Pesan ini tidak dapat disematkan.\nSilakan hubungi admin untuk memeriksa izin bot.\n" | ||
| name: Sematkan pesan | ||
| pinned: | ||
| title: ✅ Pesan Disematkan | ||
| description: Pesan berhasil disematkan. | ||
|
|
||
| slash: | ||
| add: | ||
| name: tambah-member | ||
| description: Menambahkan member ke tiket | ||
| success: | ||
| title: ✅ Ditambahkan | ||
| description: '{member} telah ditambahkan ke {ticket}.' | ||
| added: ➡️ {added} ditambahkan ke tiket oleh {by}. | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat menambahkan member ke tiket. | ||
| options: | ||
| member: | ||
| name: member | ||
| description: Member yang akan ditambahkan | ||
| ticket: | ||
| name: tiket | ||
| description: Tiket tujuan | ||
|
|
||
| force-close: | ||
| name: paksa-tutup | ||
| description: Menutup tiket secara paksa | ||
| no_tickets: | ||
| title: ❌ Tidak Ada Tiket | ||
| description: Tidak ada tiket tanpa aktivitas selama `{time}`. | ||
| closed_one: | ||
| title: ✅ Tiket Ditutup | ||
| description: Channel akan dihapus dalam beberapa detik. | ||
| confirmed_multiple: | ||
| title: | ||
| - ✅ %d Tiket Ditutup | ||
| - ✅ %d Tiket Ditutup | ||
| description: Channel akan dihapus dalam beberapa detik. | ||
| confirm_multiple: | ||
| title: ❓ Apakah Anda yakin? | ||
| description: "Akan menutup **{count}** tiket yang tidak aktif selama `{time}`:\n{tickets}\n" | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat menutup tiket secara paksa. | ||
| options: | ||
| category: | ||
| name: kategori | ||
| description: Tutup semua tiket di kategori (wajib isi waktu) | ||
| reason: | ||
| name: alasan | ||
| description: Alasan penutupan | ||
| ticket: | ||
| name: tiket | ||
| description: Tiket yang akan ditutup | ||
| time: | ||
| name: waktu | ||
| description: Tutup tiket tanpa aktivitas selama waktu tertentu | ||
|
|
||
| claim: | ||
| name: ambil | ||
| description: Mengambil tiket ini | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat mengambil tiket. | ||
|
|
||
| close: | ||
| name: tutup | ||
| description: Meminta penutupan tiket | ||
| invalid_time: | ||
| title: ❌ Tidak Valid | ||
| description: '`{input}` bukan format waktu yang valid.' | ||
| options: | ||
| reason: | ||
| name: alasan | ||
| description: Alasan penutupan tiket | ||
|
|
||
| help: | ||
| name: bantuan | ||
| description: Menampilkan menu bantuan | ||
| title: Bantuan | ||
| response: | ||
| commands: Perintah | ||
| description: '**Untuk mendapatkan bantuan, gunakan {command} untuk membuat tiket.**' | ||
| links: | ||
| commands: Semua Perintah | ||
| feedback: Feedback | ||
| links: Tautan Berguna | ||
| support: Support | ||
| docs: Dokumentasi | ||
| settings: Pengaturan Bot | ||
|
|
||
| move: | ||
| name: pindah | ||
| description: Memindahkan tiket ke kategori lain | ||
| moved: 🗃️ {by} memindahkan tiket ini dari **{from}** ke **{to}**. | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat memindahkan tiket. | ||
| options: | ||
| category: | ||
| name: kategori | ||
| description: Kategori tujuan | ||
|
|
||
| priority: | ||
| name: prioritas | ||
| description: Mengatur prioritas tiket | ||
| options: | ||
| priority: | ||
| name: prioritas | ||
| description: Prioritas tiket | ||
| choices: | ||
| LOW: 🟢 Rendah | ||
| MEDIUM: 🟠 Sedang | ||
| HIGH: 🔴 Tinggi | ||
| success: | ||
| title: ✅ Prioritas Diatur | ||
| description: Prioritas tiket diatur ke `{priority}`. | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat mengubah prioritas. | ||
|
|
||
| release: | ||
| name: lepas | ||
| description: Melepaskan penugasan tiket | ||
|
|
||
| remove: | ||
| name: hapus-member | ||
| description: Menghapus member dari tiket | ||
| success: | ||
| title: ✅ Dihapus | ||
| description: '{member} telah dihapus dari {ticket}.' | ||
| removed: ⬅️ {removed} dihapus dari tiket oleh {by}. | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat menghapus member. | ||
| options: | ||
| member: | ||
| name: member | ||
| description: Member yang akan dihapus | ||
| ticket: | ||
| name: tiket | ||
| description: Tiket tujuan | ||
|
|
||
| tickets: | ||
| name: tiket | ||
| description: Melihat daftar tiket | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat melihat tiket member lain. | ||
| options: | ||
| member: | ||
| name: member | ||
| description: Member target | ||
| response: | ||
| title: | ||
| own: Tiket Saya | ||
| other: Tiket {displayName} | ||
| description: Gunakan {transcript} untuk mengunduh salinan tiket. | ||
| fields: | ||
| open: | ||
| name: Tiket Terbuka | ||
| closed: | ||
| name: Tiket Ditutup | ||
| none: | ||
| own: "Anda belum pernah membuat tiket.\nGunakan {new} untuk membuat tiket baru.\n" | ||
| other: '{user} belum pernah membuat tiket.' | ||
|
|
||
| transfer: | ||
| name: pindah-kepemilikan | ||
| description: Memindahkan kepemilikan tiket | ||
| transferred: 📨 {user} memindahkan tiket ini ke {to}. | ||
| transferred_from: 📨 {user} memindahkan tiket dari {from} ke {to}. | ||
| options: | ||
| member: | ||
| name: member | ||
| description: Member tujuan | ||
|
|
||
| transcript: | ||
| name: transkrip | ||
| description: Mengunduh salinan tiket | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat melihat transkrip member lain. | ||
| options: | ||
| member: | ||
| name: member | ||
| description: Member target | ||
| ticket: | ||
| name: tiket | ||
| description: Tiket target | ||
|
|
||
| new: | ||
| name: tiket-baru | ||
| description: Membuat tiket baru | ||
| options: | ||
| references: | ||
| name: referensi-tiket | ||
| description: Nomor tiket terkait | ||
|
|
||
| tag: | ||
| name: tag | ||
| description: Menggunakan tag | ||
| options: | ||
| tag: | ||
| name: tag | ||
| description: Nama tag | ||
| for: | ||
| name: target | ||
| description: Member target | ||
|
|
||
| topic: | ||
| name: topik | ||
| description: Mengubah topik tiket | ||
|
|
||
| user: | ||
| create: | ||
| name: buat-tiket-untuk-member | ||
| not_staff: | ||
| title: ❌ Error | ||
| description: Hanya admin yang dapat membuka tiket untuk member lain. | ||
| sent: | ||
| title: ✅ Prompt Dikirim | ||
| description: '{user} diundang untuk membuat tiket di **{category}**.' | ||
| prompt: | ||
| title: Silakan buat tiket | ||
| description: Tekan tombol di bawah untuk membuat tiket. | ||
|
|
||
| ticket: | ||
| created: | ||
| title: ✅ Tiket Dibuat | ||
| description: Tiket {channel} berhasil dibuat. | ||
| edited: | ||
| title: ✅ Tiket Diperbarui | ||
| description: Perubahan berhasil disimpan. | ||
| closed: | ||
| title: ✅ Tiket Ditutup | ||
| description: Channel akan dihapus dalam beberapa detik… | ||
| claimed: 🙌 {user} mengambil tiket ini. | ||
| released: ♻️ {user} melepas penugasan tiket ini. | ||
| feedback: Terima kasih atas feedback Anda. | ||
| answers: | ||
| no_value: '*Tidak ada jawaban*' | ||
|
|
||
| modals: | ||
| topic: | ||
| label: Topik | ||
| placeholder: Apa topik tiket ini? | ||
| feedback: | ||
| title: Apakah ini membantu? | ||
| rating: | ||
| label: Penilaian | ||
| placeholder: 1-5 | ||
| comment: | ||
| label: Komentar | ||
| placeholder: Ada komentar tambahan? | ||
|
|
||
| misc: | ||
| ratelimited: | ||
| title: 🐢 Terlalu Cepat | ||
| description: Silakan coba lagi dalam beberapa detik. | ||
| not_ticket: | ||
| title: ❌ Bukan Channel Tiket | ||
| description: Perintah ini hanya dapat digunakan di channel tiket. | ||
| cooldown: | ||
| title: ❌ Tunggu Sebentar | ||
| description: Coba lagi dalam {time} detik. | ||
| blocked: | ||
| title: ❌ Diblokir | ||
| description: Anda tidak diizinkan membuat tiket. | ||
| expired: | ||
| title: ⏰ Kedaluwarsa | ||
| description: Waktu habis. Silakan coba lagi. | ||
| unknown_category: | ||
| title: ❌ Kategori Tidak Ditemukan | ||
| description: Silakan masukkan kategori yang valid. | ||
| invalid_ticket: | ||
| title: ❌ Tiket Tidak Valid | ||
| description: Silakan masukkan tiket yang valid. | ||
|
|
||
| menus: | ||
| guild: | ||
| placeholder: Pilih Server | ||
| category: | ||
| placeholder: Pilih Kategori Tiket | ||
|
Comment on lines
+1
to
+324
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🧩 Analysis chain🏁 Script executed: # First, let's find all locale files in the repository
find . -path ./node_modules -prune -o -name "*.yml" -type f | grep -i i18n | head -20Repository: discord-tickets/bot Length of output: 445 🏁 Script executed: #!/bin/bash
# Extract all YAML keys from a file using Python for proper YAML parsing
extract_yaml_keys() {
python3 - "$1" <<'PYEOF'
import sys
import yaml
def get_all_keys(data, prefix=''):
"""Recursively extract all keys from nested dict"""
keys = []
if isinstance(data, dict):
for k, v in data.items():
full_key = f"{prefix}.{k}" if prefix else k
keys.append(full_key)
if isinstance(v, dict):
keys.extend(get_all_keys(v, full_key))
return keys
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
keys = sorted(get_all_keys(data))
for key in keys:
print(key)
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
PYEOF
}
echo "Extracting keys from en-GB.yml (reference)..."
ref_keys=$(extract_yaml_keys src/i18n/en-GB.yml)
ref_count=$(echo "$ref_keys" | wc -l)
echo "Total keys in reference: $ref_count"
echo -e "\nExtracting keys from id.yml (Indonesian)..."
id_keys=$(extract_yaml_keys src/i18n/id.yml)
id_count=$(echo "$id_keys" | wc -l)
echo "Total keys in Indonesian: $id_count"
echo -e "\n=== KEYS IN REFERENCE BUT MISSING IN INDONESIAN ==="
missing=$(comm -23 <(echo "$ref_keys") <(echo "$id_keys"))
missing_count=$(echo "$missing" | grep -c . || echo 0)
echo "Missing keys: $missing_count"
if [ "$missing_count" -gt 0 ]; then
echo "$missing" | head -30
if [ "$missing_count" -gt 30 ]; then
echo "... and $((missing_count - 30)) more"
fi
fi
echo -e "\n=== KEYS IN INDONESIAN BUT NOT IN REFERENCE ==="
extra=$(comm -13 <(echo "$ref_keys") <(echo "$id_keys"))
extra_count=$(echo "$extra" | grep -c . || echo 0)
echo "Extra keys: $extra_count"
if [ "$extra_count" -gt 0 ]; then
echo "$extra" | head -30
if [ "$extra_count" -gt 30 ]; then
echo "... and $((extra_count - 30)) more"
fi
fiRepository: discord-tickets/bot Length of output: 565 🏁 Script executed: #!/bin/bash
# Extract all YAML keys from a file using Python for proper YAML parsing
extract_yaml_keys() {
python3 - "$1" <<'PYEOF'
import sys
import yaml
def get_all_keys(data, prefix=''):
"""Recursively extract all keys from nested dict"""
keys = []
if isinstance(data, dict):
for k, v in data.items():
full_key = f"{prefix}.{k}" if prefix else k
keys.append(full_key)
if isinstance(v, dict):
keys.extend(get_all_keys(v, full_key))
return keys
try:
with open(sys.argv[1], 'r', encoding='utf-8') as f:
data = yaml.safe_load(f)
keys = sorted(get_all_keys(data))
for key in keys:
print(key)
except Exception as e:
print(f"Error: {e}", file=sys.stderr)
PYEOF
}
echo "Extracting and comparing keys..."
ref_keys=$(extract_yaml_keys src/i18n/en-GB.yml | sort)
id_keys=$(extract_yaml_keys src/i18n/id.yml | sort)
ref_count=$(echo "$ref_keys" | wc -l)
id_count=$(echo "$id_keys" | wc -l)
echo "Reference (en-GB.yml): $ref_count keys"
echo "Indonesian (id.yml): $id_count keys"
echo -e "\n=== MISSING KEYS IN INDONESIAN ==="
# Find missing keys using grep
missing=()
while IFS= read -r key; do
if ! echo "$id_keys" | grep -Fxq "$key"; then
missing+=("$key")
fi
done <<< "$ref_keys"
missing_count=${#missing[@]}
echo "Missing keys: $missing_count"
echo ""
# Display first 40 missing keys
for ((i = 0; i < missing_count && i < 40; i++)); do
echo "${missing[$i]}"
done
if [ "$missing_count" -gt 40 ]; then
echo "... and $((missing_count - 40)) more missing keys"
fiRepository: discord-tickets/bot Length of output: 1369 Add 162 missing translation keys to match reference locale. The Indonesian locale is missing 162 keys compared to the reference English locale (en-GB.yml: 460 keys vs id.yml: 301 keys). Missing keys include:
Without these translations, users will see untranslated text or English fallbacks. Compare id.yml against src/i18n/en-GB.yml and add all missing keys with Indonesian translations. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
# Extract all placeholders from the new Indonesian file and compare with an existing locale file
echo "=== Placeholders in id.yml ==="
rg -o '\{[a-zA-Z_]+\}' src/i18n/id.yml | sort -u
echo -e "\n=== Checking available locale files ==="
fd -e yml . src/i18n --max-depth 1
echo -e "\n=== Placeholders in reference locale (en-GB.yml) ==="
if [ -f src/i18n/en-GB.yml ]; then
rg -o '\{[a-zA-Z_]+\}' src/i18n/en-GB.yml | sort -u
elif [ -f src/i18n/en-US.yml ]; then
echo "Using en-US.yml instead"
rg -o '\{[a-zA-Z_]+\}' src/i18n/en-US.yml | sort -u
else
echo "No reference English locale file found, checking for any .yml files"
ls -la src/i18n/
fiRepository: discord-tickets/bot Length of output: 1153 🏁 Script executed: #!/bin/bash
# Compare the top-level keys between id.yml and en-GB.yml to check if sections are missing
echo "=== Top-level keys in id.yml ==="
rg '^[a-zA-Z_]+:' src/i18n/id.yml | sed 's/:$//' | sort -u
echo -e "\n=== Top-level keys in en-GB.yml ==="
rg '^[a-zA-Z_]+:' src/i18n/en-GB.yml | sed 's/:$//' | sort -uRepository: discord-tickets/bot Length of output: 223 🏁 Script executed: #!/bin/bash
# Check the dm and log sections in en-GB.yml to see if they're essential
echo "=== dm section in en-GB.yml ==="
sed -n '/^dm:/,/^[a-zA-Z]/p' src/i18n/en-GB.yml | head -50
echo -e "\n=== log section in en-GB.yml ==="
sed -n '/^log:/,/^[a-zA-Z]/p' src/i18n/en-GB.yml | head -50Repository: discord-tickets/bot Length of output: 1496 Add missing The Indonesian locale file is incomplete. While all placeholder variables are consistent with the English reference, the file is missing two top-level sections present in en-GB.yml:
These sections should be translated and added to maintain parity with the English localization. 🤖 Prompt for AI Agents |
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧩 Analysis chain
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 2577
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 2985
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 1993
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 4475
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 7026
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 39605
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 264
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 3190
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 2824
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 664
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 275
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 478
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 121
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 1520
🏁 Script executed:
Repository: discord-tickets/bot
Length of output: 846
Remove trailing newline from field value.
The string ends with
\nwhich will cause unwanted spacing in Discord message embeds. This pattern affects multiple locales (id, da, es-ES, hu, ko, pl, th, fr, and others) for thecommands.slash.tickets.response.fields.closed.none.ownfield. Either remove the trailing\nfrom the quoted string or switch to YAML multiline syntax (|-) which strips the final newline.🤖 Prompt for AI Agents