From 3d13a72ae0350b0b417ee95cda17818d4189beec Mon Sep 17 00:00:00 2001 From: mvalentsev Date: Wed, 15 Apr 2026 17:50:28 +0500 Subject: [PATCH] feat(i18n): add Brazilian Portuguese locale with entity detection (closes #117) CLI strings, AAAK instruction, regex patterns, and entity section with person-verb, pronoun, dialogue, and candidate patterns for Latin+diacritics names (Joao, Ines, Angela). Follows the i18n entity framework from #911. --- mempalace/i18n/pt-br.json | 128 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 mempalace/i18n/pt-br.json diff --git a/mempalace/i18n/pt-br.json b/mempalace/i18n/pt-br.json new file mode 100644 index 0000000..2517e55 --- /dev/null +++ b/mempalace/i18n/pt-br.json @@ -0,0 +1,128 @@ +{ + "lang": "pt-br", + "label": "Português (Brasil)", + "terms": { + "palace": "palácio", + "wing": "ala", + "hall": "corredor", + "closet": "armário", + "drawer": "gaveta", + "mine": "minerar", + "search": "buscar", + "status": "status", + "init": "inicializar", + "repair": "reparar", + "migrate": "migrar", + "entity": "entidade", + "topic": "tópico" + }, + "cli": { + "mine_start": "Minerando {path}...", + "mine_complete": "Pronto. {closets} armários, {drawers} gavetas criados.", + "mine_skip": "Já minerado. Use --force para refazer.", + "search_no_results": "Sem resultados para: {query}", + "search_results": "{count} resultados encontrados:", + "status_palace": "Palácio: {path}", + "status_wings": "{count} alas", + "status_closets": "{count} armários", + "status_drawers": "{count} gavetas", + "init_complete": "Palácio inicializado em {path}", + "init_exists": "Já existe um palácio em {path}", + "repair_complete": "Reparo completo. {fixed} problemas corrigidos.", + "migrate_complete": "Migração completa.", + "no_palace": "Nenhum palácio encontrado. Execute: mempalace init " + }, + "aaak": { + "instruction": "Comprima em português. Hifens entre palavras, pipes entre conceitos. Remova artigos e palavras de preenchimento. Mantenha nomes próprios e números exatos." + }, + "regex": { + "topic_pattern": "[A-ZÀ-Ú][a-zà-ÿ]{2,}|[A-Za-zÀ-ÿ]{3,}", + "stop_words": "o a os as um uma uns umas de do da dos das em no na nos nas por para com sem sobre entre ao aos seu sua seus suas meu minha meus minhas tu teu tua que quem qual onde quando porque embora mas porém também muito mais como este esta estes estas esse essa esses essas aquele aquela é são está estão foi ser estar ter sido", + "quote_pattern": "\"([^\"]{10,200})\"|«([^»]{10,200})»", + "action_pattern": "(?:construído|corrigido|escrito|adicionado|enviado|medido|testado|revisado|criado|excluído|atualizado|configurado|implantado|migrado)\\s+[\\wà-ÿ\\s]{3,30}" + }, + "entity": { + "candidate_pattern": "[A-ZÀ-Ú][a-zà-ÿ]{1,19}", + "multi_word_pattern": "[A-ZÀ-Ú][a-zà-ÿ]+(?:\\s+[A-ZÀ-Ú][a-zà-ÿ]+)+", + "person_verb_patterns": [ + "\\b{name}\\s+disse\\b", + "\\b{name}\\s+perguntou\\b", + "\\b{name}\\s+respondeu\\b", + "\\b{name}\\s+contou\\b", + "\\b{name}\\s+riu\\b", + "\\b{name}\\s+sorriu\\b", + "\\b{name}\\s+chorou\\b", + "\\b{name}\\s+sentiu\\b", + "\\b{name}\\s+pensa\\b", + "\\b{name}\\s+quer\\b", + "\\b{name}\\s+ama\\b", + "\\b{name}\\s+odeia\\b", + "\\b{name}\\s+sabe\\b", + "\\b{name}\\s+decidiu\\b", + "\\b{name}\\s+escreveu\\b" + ], + "pronoun_patterns": [ + "\\bela\\b", + "\\bdela\\b", + "\\bele\\b", + "\\bdele\\b", + "\\beles\\b", + "\\belas\\b", + "\\bdeles\\b", + "\\bdelas\\b" + ], + "dialogue_patterns": [ + "^\">\\s*{name}[:\\s]", + "^{name}:\\s", + "^\\[{name}\\]", + "\"{name}\\s+disse" + ], + "direct_address_pattern": "\\boi\\s+{name}\\b|\\bol[áa]\\s+{name}\\b|\\bobrigad[oa]\\s+{name}\\b|\\bcaro\\s+{name}\\b|\\bcara\\s+{name}\\b", + "project_verb_patterns": [ + "\\bconstruindo\\s+{name}\\b", + "\\bconstruiu\\s+{name}\\b", + "\\blançando\\s+{name}\\b", + "\\blançou\\s+{name}\\b", + "\\bimplantando\\s+{name}\\b", + "\\bimplantou\\s+{name}\\b", + "\\binstalando\\s+{name}\\b", + "\\binstalou\\s+{name}\\b", + "\\bo\\s+sistema\\s+{name}\\b", + "\\bo\\s+projeto\\s+{name}\\b", + "\\bimport\\s+{name}\\b", + "\\bpip\\s+install\\s+{name}\\b" + ], + "stopwords": [ + "oi", + "ola", + "olá", + "obrigado", + "obrigada", + "sim", + "não", + "talvez", + "aqui", + "ali", + "lá", + "agora", + "hoje", + "ontem", + "amanhã", + "sempre", + "nunca", + "ainda", + "também", + "muito", + "pouco", + "bem", + "mal", + "assim", + "então", + "depois", + "antes", + "durante", + "sobre", + "entre" + ] + } +}