From 7895f41602dc4e25ed07bfb0a0eb56fc71af985a Mon Sep 17 00:00:00 2001 From: Jimi hackathon Date: Sat, 27 Jun 2026 18:59:15 -0300 Subject: [PATCH] imlementacao traducao --- app/lang/ht.json | 9 +++++++- app/lang/pt.json | 9 +++++++- app/src/App.jsx | 3 ++- .../programacao/aspirador/config/config.js | 2 +- app/src/components/game/GameFaseInfo.jsx | 3 ++- app/src/services/localizedMessages.js | 23 ++++++++++++++++++- 6 files changed, 43 insertions(+), 6 deletions(-) diff --git a/app/lang/ht.json b/app/lang/ht.json index 9e26dfe..31ea7d0 100644 --- a/app/lang/ht.json +++ b/app/lang/ht.json @@ -1 +1,8 @@ -{} \ No newline at end of file +{ + "atividades": + { + "aspirador": { + "nome": "Faz 1: Liy Dwat la" + } + } +} \ No newline at end of file diff --git a/app/lang/pt.json b/app/lang/pt.json index 9e26dfe..fb18712 100644 --- a/app/lang/pt.json +++ b/app/lang/pt.json @@ -1 +1,8 @@ -{} \ No newline at end of file +{ + "atividades": + { + "aspirador": { + "nome": "Fase 1: A Linha Reta" + } + } +} \ No newline at end of file diff --git a/app/src/App.jsx b/app/src/App.jsx index 6c645ff..e90dfe3 100644 --- a/app/src/App.jsx +++ b/app/src/App.jsx @@ -120,7 +120,8 @@ function AppRoutes() { export default function App() { const locale = 'ht'; const translatedMessages = getLocalizedMessages(locale); - console.log(translatedMessages); + // TODO: fazer botão + window.localStorage.setItem("locale", 'ht'); return ( }> diff --git a/app/src/atividades/programacao/aspirador/config/config.js b/app/src/atividades/programacao/aspirador/config/config.js index d6f31a2..489dbdd 100644 --- a/app/src/atividades/programacao/aspirador/config/config.js +++ b/app/src/atividades/programacao/aspirador/config/config.js @@ -42,7 +42,7 @@ export const gameConfig = { // ========================================== { id: 1, - nome: "Fase 1: A Linha Reta", + nome: "$atividades.aspirador.nome", descricao: "Use o bloco 'Enquanto houver sujeira' e o comando 'Mover' para ligá-lo.", timeout: 10, maxBlocks: 3, diff --git a/app/src/components/game/GameFaseInfo.jsx b/app/src/components/game/GameFaseInfo.jsx index 98c88aa..6f40bc0 100644 --- a/app/src/components/game/GameFaseInfo.jsx +++ b/app/src/components/game/GameFaseInfo.jsx @@ -1,6 +1,7 @@ import React from "react"; import PropTypes from "prop-types"; +import { translate } from "../../services/localizedMessages"; function obterDificuldade(dadosFase) { // Usa a dificuldade da fase, se existir, senão calcula pelo número @@ -40,7 +41,7 @@ function GameFaseInfo({ phaseData = {}, phaseNumber }) { {/* Título/Subtítulo */}

- {phaseData.nome} + {translate(phaseData.nome)}

{phaseData.descricao && (

diff --git a/app/src/services/localizedMessages.js b/app/src/services/localizedMessages.js index f71ad1e..393b1fc 100644 --- a/app/src/services/localizedMessages.js +++ b/app/src/services/localizedMessages.js @@ -1,8 +1,29 @@ import ht from "./../../lang/ht.json"; import pt from "./../../lang/pt.json"; export function getLocalizedMessages(locale) { + console.log('localized import json'); return { ht, pt - }; + }[locale]; +} + +export function getUserLocale() { + return getLocalizedMessages(window.localStorage.getItem('locale') ?? 'pt'); +} + +const accessObject = (path, object) => { + return path.split('.').reduce((o, i) => o[i], object); +} + +export function translate(message) { + if (message.match(/^\$/)) { + const result = accessObject(message.substr(1), getUserLocale()); + if(result) { + return result; + } else { + console.error(`path ${message} not found on lang`); + } + } + return message; }