From d3fbc3c61d48446c43c17b5ea21d0aa5cdee0f6d Mon Sep 17 00:00:00 2001 From: Filipe Lopes Date: Thu, 5 Nov 2026 11:58:57 -0300 Subject: [PATCH] fix(i18n): align Brazilian Portuguese glossary and localization guidance * Add guidance to follow the OCL Design System localization guide and preserve translation keys and placeholders * Update Portuguese terminology for retired content, locales, mapping algorithms, Bridge concepts, and quota messages --- src/i18n/README.md | 8 +++ src/i18n/locales/pt-BR/translations.json | 84 ++++++++++++------------ 2 files changed, 50 insertions(+), 42 deletions(-) create mode 100644 src/i18n/README.md diff --git a/src/i18n/README.md b/src/i18n/README.md new file mode 100644 index 00000000..b794c36d --- /dev/null +++ b/src/i18n/README.md @@ -0,0 +1,8 @@ +# Localização + +As traduções deste aplicativo seguem o [guia de localização do OCL Design +System](https://openconceptlab.github.io/ocl-design-system/guides/localization.html). + +Antes de criar ou alterar uma string, consulte o guia para as regras de composição +de texto e o glossário canônico. Preserve as chaves, os parâmetros de interpolação +(`{{name}}`) e as tags de componentes (`<0/>`) do catálogo em inglês. \ No newline at end of file diff --git a/src/i18n/locales/pt-BR/translations.json b/src/i18n/locales/pt-BR/translations.json index a3e44e79..01ccc12a 100644 --- a/src/i18n/locales/pt-BR/translations.json +++ b/src/i18n/locales/pt-BR/translations.json @@ -27,7 +27,7 @@ "go_back_or_to_your_dashboard": "Você pode <0/> ou ir para o seu <1/>.", "for_a_new_account": "para criar uma nova conta", "back": "voltar", - "retired": "Aposentado", + "retired": "Descontinuado", "id": "ID", "name": "Nome", "full_name": "Nome completo", @@ -162,23 +162,23 @@ }, "concept": { "concepts": "Conceitos", - "retired_concepts": "Conceitos Aposentados", + "retired_concepts": "Conceitos descontinuados", "tab_concept_details": "Detalhes do Conceito", - "tab_bridge_concept_details": "Detalhes do Conceito Ponte", - "tab_bridge_concept": "Conceito Ponte", - "tab_bridge_concepts": "Conceitos Ponte", + "tab_bridge_concept_details": "Detalhes do conceito de conexão (Bridge)", + "tab_bridge_concept": "Conceito de conexão (Bridge)", + "tab_bridge_concepts": "Conceitos de conexão (Bridge)", "tab_bridge_children": "Candidatos de Destino", "open_in_term_browser": "Abrir no TermBrowser", "also_candidate_for": "Também candidato para {{code}}", - "linked_bridge_concept": "Conceito ponte", + "linked_bridge_concept": "Conceito de conexão (Bridge)", "linked_bridge_child": "Candidato de destino", "linked_target_concept": "Conceito de destino", "show_more_locales": "Ver mais {{count}}", "show_fewer_locales": "Ver menos", "display_name": "Nome de exibição", - "concept_class": "Classe do Conceito", - "datatype": "Tipo de Dado", - "datatypes": "Tipos de Dado", + "concept_class": "Classe do conceito", + "datatype": "Tipo de dado", + "datatypes": "Tipos de dado", "name_and_synonyms": "Nome e sinônimos", "descriptions": "Descrições", "copied_name": "Nome do conceito e URL copiados para a área de transferência", @@ -194,7 +194,7 @@ "external_id": "ID Externo", "concept_class": "Classe do Conceito", "datatype": "Tipo de dado", - "locale": "Localidade", + "locale": "Idioma", "name": "Nome", "description": "Descrição", "type": "Tipo", @@ -214,7 +214,7 @@ "mapping": { "mappings": "Mapeamentos", "same_as_mappings": "Mapeamentos (SAME-AS)", - "retired_mappings": "Mapeamentos Aposentados", + "retired_mappings": "Mapeamentos descontinuados", "fromConcept": "Conceito de origem", "toConcept": "Conceito de destino", "type": "Tipo", @@ -255,8 +255,8 @@ "compare_versions": "Comparar versões", "compare": "Comparar", "visibility": "Visibilidade", - "locales": "Localidades", - "locale": "Localidade", + "locales": "Idiomas", + "locale": "Idioma", "identifier": "Identificador", "contact": "Contato", "jurisdiction": "Jurisdição", @@ -279,8 +279,8 @@ "custom_validation_schema": "Schema de Validação Personalizado", "compare_origin_version_disabled_tooltip": "Você deve selecionar uma versão mais antiga para comparar", "compare_destination_version_disabled_tooltip": "Você deve selecionar uma versão mais nova para comparar", - "summary_active_concepts_from_total": "{{active}} conceitos ativos ({{retired}} aposentados)", - "summary_active_mappings_from_total": "{{active}} mapeamentos ativos ({{retired}} aposentados)", + "summary_active_concepts_from_total": "{{active}} conceitos ativos ({{retired}} descontinuados)", + "summary_active_mappings_from_total": "{{active}} mapeamentos ativos ({{retired}} descontinuados)", "summary_released_versions_from_total": "{{released}} versões publicadas ({{unreleased}} não publicadas)", "summary_concepts_references": "{{count}} referências de conceitos", "summary_mappings_references": "{{count}} referências de mapeamentos", @@ -420,15 +420,15 @@ "target_repository": "Repositório de Destino", "target_repository_description": "Selecione o repositório para o qual você deseja mapear seus dados de entrada.", "repository": "Repositório", - "filter_name_locales": "Filtro Global de Localidades de Nome", - "loading_name_locales": "Carregando Localidades de Nome...", + "filter_name_locales": "Filtro global de idiomas de nome", + "loading_name_locales": "Carregando idiomas de nome...", "filter_name_locales_helper": "Nota: Restringir candidatos a idiomas específicos limita capacidades de correspondência inter-idiomas, mas pode melhorar a precisão dos resultados para certos conjuntos de dados, especialmente se os dados de entrada estão no mesmo idioma que o idioma padrão do repositório de destino.", "input_language": "Idioma de Entrada", - "input_language_helper": "Idioma dos dados de entrada. Determina quais localidades de nome do repositório de destino são enviadas ao Assistente de IA.", + "input_language_helper": "Idioma dos dados de entrada. Determina quais idiomas de nome do repositório de destino são enviados ao Assistente de IA.", "ai_effective_locales": "IA receberá nomes em: {{locales}}", - "ai_all_locales": "IA receberá nomes em: todas as localidades (sem filtro)", + "ai_all_locales": "IA receberá nomes em: todos os idiomas (sem filtro)", "default_filter": "Filtro Padrão", - "matching_algorithm": "Algoritmo de correspondência", + "matching_algorithm": "Métodos de mapeamento", "matching_algorithm_description": "Selecione um ou mais algoritmos de mapeamento. <0>Saiba mais", "custom_match_api": "API de Correspondência Personalizada", "custom_match_api_description": "Configurar URL e Token da API de Correspondência Externa", @@ -455,12 +455,12 @@ "best_candidate_quality": "Melhor candidato. Nenhuma correspondência proposta ainda.", "low_ranked": "Baixa classificação", "field_configuration": "Configuração de Campo", - "field_configuration_description": "Associe campos nos dados de entrada a campos que os algoritmos de correspondência são capazes de entender. Atribua campos de entrada que contenham códigos de conceito ou mapeamentos a repositórios específicos. Saiba mais", + "field_configuration_description": "Associe campos nos dados de entrada a campos que os algoritmos de mapeamento são capazes de entender. Atribua campos de entrada que contenham códigos de conceito ou mapeamentos a repositórios específicos. Saiba mais", "input_column": "Coluna de Entrada", "mapped_field": "Campo Mapeado", "field": "Campo", "value": "Valor", - "include_retired": "Incluir Aposentados", + "include_retired": "Incluir descontinuados", "map": "Mapear", "un_map": "Desmapear", "used_in_this_project": "Usado neste Projeto", @@ -479,7 +479,7 @@ "delete_map_project_type_to_confirm": "Por favor, digite <0>{{name}} para confirmar", "clear_filter": "Limpar Filtro", "configure_mapping_project_tooltip": "Configurar Projeto de Mapeamento", - "auto_match": "Correspondência Automática", + "auto_match": "Auto Match", "auto_matched": "Correspondido Automaticamente", "unmapped_only": "Apenas Não Mapeados", "map_target": "Alvo do Mapeamento", @@ -570,7 +570,7 @@ "algorithm_custom_label": "API Personalizada", "algorithm_custom_description": "API $match personalizada", "target_code": "Código de Destino", - "bridge_candidates": "Candidatos Ponte", + "bridge_candidates": "Candidatos de mapeamento cruzado (Bridge)", "scispacy_candidates": "Candidatos ScispaCy LOINC", "ai_analysis": "Análise de IA", "group_by_ai_analysis": "Análise de IA", @@ -588,9 +588,9 @@ "auto_match_note_no_counts": "Nota: Isso não afetará linhas de entrada aprovadas mas substituirá linhas de entrada propostas", "auto_match_all_including_approved_note": "Aviso: Isso executará novamente cada linha de entrada do zero e sobrescreverá {{approvedCount}} decisões aprovadas e {{proposedCount}} propostas", "auto_match_all_including_approved_confirm": "Entendo que {{approvedCount}} decisões aprovadas serão sobrescritas", - "auto_match_selected_rows_note": "Nota: Isso executará Correspondência Automática para {{count}} linha(s) de entrada selecionada(s)", + "auto_match_selected_rows_note": "Nota: Isso executará Auto Match para {{count}} linha(s) de entrada selecionada(s)", "auto_match_selected_rows_note_no_count": "Nota: Selecione linhas no painel esquerdo para habilitar esta opção", - "auto_match_rows_failed": "Correspondência falhou para {{count}} linha(s) de entrada, então elas estão sem candidatos: {{details}}. Linhas contam a partir da primeira linha de dados do seu arquivo. Execute Correspondência Automática naquelas linhas novamente para tentar de novo.", + "auto_match_rows_failed": "Correspondência falhou para {{count}} linha(s) de entrada, então elas estão sem candidatos: {{details}}. Linhas contam a partir da primeira linha de dados do seu arquivo. Execute Auto Match naquelas linhas novamente para tentar de novo.", "auto_match_rows_failed_algorithm": "{{algorithm}} na(s) linha(s) {{rows}}", "match_request_failed": "Não foi possível obter candidatos ({{error}}). Tente novamente.", "run_ai_analysis": "Executar Análise de IA", @@ -624,7 +624,7 @@ "available_candidates": "Candidatos Disponíveis", "unranked_candidates": "Candidatos Não Classificados", "low_ranked_candidates": "Candidatos de Baixa Classificação", - "ciel_bridge_terminology_candidates": "Candidatos de Terminologia Ponte CIEL", + "ciel_bridge_terminology_candidates": "Candidatos de mapeamento cruzado (via CIEL Bridge terminology)", "fetching": "Buscando...", "fetch_more": "Buscar Mais", "unrecognized_algorithm": "Algoritmo não reconhecido", @@ -676,7 +676,7 @@ "group_by_match_quality": "Qualidade de Correspondência", "ocl_semantic_algorithm": "Algoritmo Semântico do OCL", "ocl_search_algorithm": "Algoritmo de Busca do OCL", - "ocl_ciel_bridge_algorithm": "Terminologia Ponte CIEL do OCL", + "ocl_ciel_bridge_algorithm": "Terminologia OCL CIEL Bridge", "ocl_scispacy_loinc_algorithm": "Algoritmo ScispaCy LOINC do OCL", "scispacy_warming_up": "Serviço de correspondência scispacy do OCL está aquecendo. Tentará novamente automaticamente em 2 minutos.", "ocl_custom_algorithm": "Algoritmo Personalizado do OCL", @@ -713,7 +713,7 @@ "rows_to_match": "Linhas para Correspondência", "out_of": "de", "retrieve_candidates": "Recuperar Candidatos", - "retrieve_candidates_helper_text": "Seu projeto está configurado para usar os seguintes algoritmos de correspondência:", + "retrieve_candidates_helper_text": "Seu projeto está configurado para usar os seguintes algoritmos de mapeamento:", "all_candidates": "Todos os Candidatos", "rows": "linhas", "finished_running": "Finalizado", @@ -732,13 +732,13 @@ "canonical_auto_derived": "Auto-derivada", "canonical_auto_derived_short": "derivada", "bridge_canonical_short": "Bridge:", - "bridge_canonical_url": "URL Canônica Bridge", - "bridge_canonical_url_description": "URL canônica do code system bridge (deixe em branco para derivar da URL relativa).", + "bridge_canonical_url": "URL canônica do Bridge", + "bridge_canonical_url_description": "URL canônica do Code System Bridge (deixe em branco para derivar da URL relativa).", "loading_versions": "Carregando versões...", - "bridge_version_description": "Apenas versões com suporte LLM podem ser selecionadas para correspondência bridge.", - "bridge_version_unavailable": "Nenhuma versão de Source bridge com suporte LLM está disponível.", - "bridge_version_source_required": "Defina uma URL de Source bridge antes de escolher uma versão.", - "bridge_version_reset": "Versão do repo bridge alterada para {{version}} porque a versão selecionada anteriormente ({{previous}}) não está mais disponível.", + "bridge_version_description": "Apenas versões com suporte LLM podem ser selecionadas para correspondência via Bridge.", + "bridge_version_unavailable": "Nenhuma versão de Source Bridge com suporte LLM está disponível.", + "bridge_version_source_required": "Defina uma URL de Source Bridge antes de escolher uma versão.", + "bridge_version_reset": "Versão do repo Bridge alterada para {{version}} porque a versão selecionada anteriormente ({{previous}}) não está mais disponível.", "not_vectorised": "Não vetorizado", "advanced_settings": "Configurações avançadas", "resolution_namespace": "Namespace de Resolução", @@ -746,16 +746,16 @@ "algo_canonical_url": "URL Canônica", "algo_canonical_url_required": "URL canônica é obrigatória para algoritmos personalizados (ex.: http://loinc.org).", "algo_canonical_url_invalid": "Insira uma URL completa começando com http:// ou https://", - "algo_canonical_url_description": "URL canônica do code system no qual este algoritmo busca correspondências (ex.: http://loinc.org).", + "algo_canonical_url_description": "URL canônica do Code System no qual este algoritmo busca correspondências (ex.: http://loinc.org).", "config_errors_title": "Configuração do projeto está incompleta", "config_error_missing_canonical": "Algoritmo personalizado \"{{name}}\" está sem uma URL canônica válida.", "target_repo_required_on_load": "Este projeto está sem um repositório de destino. Configure o repositório de destino para ver candidatos salvos.", "create_similar": "Criar similar", "create_similar_name": "Cópia de {{name}}", "set_ai_assistant_output_language": "Definir idioma de saída do Assistente de IA", - "ai_assistant_output_locale": "Localidade de saída", + "ai_assistant_output_locale": "Idioma de saída", "ai_assistant_output_locale_helper": "Escolha da lista, ou digite um código BCP-47 regional (ex.: pt-BR, fr-CA).", - "output_locale": "Localidade de saída", + "output_locale": "Idioma de saída", "use_lexical_variants": "Usar Variantes Lexicais", "use_lexical_variants_description": "Expandir busca $match para incluir variantes de ortografia em inglês (ex.: color/colour, leukemia/leukaemia) ao corresponder nomes de conceitos.", "ai_recommendation_failed_retry": "Recomendação de IA falhou — clique para tentar novamente", @@ -779,7 +779,7 @@ "title_cap": "Você atingiu seu limite", "your_plan": "Seu plano", "used_of": "{{used}} de {{limit}} usado(s)", - "period_one_time": "Permissão de prévia única", + "period_one_time": "Cota única de prévia", "request_more_access": "Solicitar mais acesso", "view_pricing": "Ver preços", "meter": { @@ -791,10 +791,10 @@ "generic": "Uso" }, "consequence": { - "generic": "Alguns recursos estão pausados até que sua permissão seja aumentada.", + "generic": "Alguns recursos estão pausados até que sua cota seja aumentada.", "ai_assistant_calls": { "default": "Recursos que usam o Assistente de IA do OCL estão pausados.", - "auto_match": "Correspondência Automática continuará rodando sem recomendações do Assistente de IA do OCL." + "auto_match": "Auto Match continuará rodando sem recomendações do Assistente de IA do OCL." }, "ai_assistant_change_comments": { "default": "Você ainda pode escrever o comentário de atualização sozinho, sem um rascunho do Assistente de IA do OCL.", @@ -802,7 +802,7 @@ }, "match_operations": { "default": "Correspondência está pausada.", - "auto_match": "Você ainda pode revisar, editar e exportar seus projetos, mas a Correspondência Automática está pausada.", + "auto_match": "Você ainda pode revisar, editar e exportar seus projetos, mas o Auto Match está pausado.", "tbv3_match": "Busca continuará funcionando, mas $match com Busca Semântica do OCL está pausado." }, "projects": {