From 41984386cda89d096bfdeb13444908c0d35c16c3 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 25 Mar 2021 15:30:49 -0300 Subject: [PATCH 1/9] Add initial config --- app/package.json | 3 +++ app/src/components/I18n/Flag.js | 10 +++++++ app/src/components/I18n/I18n.js | 38 +++++++++++++++++++++++++++ app/src/components/I18n/Translator.js | 12 +++++++++ app/src/i18n/index.js | 25 ++++++++++++++++++ app/src/i18n/locales/en-us.js | 7 +++++ app/src/i18n/locales/index.js | 9 +++++++ app/src/i18n/locales/pt-br.js | 7 +++++ app/src/index.js | 1 + 9 files changed, 112 insertions(+) create mode 100644 app/src/components/I18n/Flag.js create mode 100644 app/src/components/I18n/I18n.js create mode 100644 app/src/components/I18n/Translator.js create mode 100644 app/src/i18n/index.js create mode 100644 app/src/i18n/locales/en-us.js create mode 100644 app/src/i18n/locales/index.js create mode 100644 app/src/i18n/locales/pt-br.js diff --git a/app/package.json b/app/package.json index 2dc7b2f..ecf4d10 100644 --- a/app/package.json +++ b/app/package.json @@ -7,9 +7,12 @@ "@material-ui/icons": "^4.2.1", "@svgr/cli": "^4.3.2", "axios": "^0.19.0", + "i18next": "^20.1.0", + "i18next-browser-languagedetector": "^6.1.0", "react": "^16.8.6", "react-beautiful-dnd": "^11.0.5", "react-dom": "^16.8.6", + "react-i18next": "^11.8.11", "react-redux": "^7.1.0", "react-router-dom": "^5.0.1", "react-scripts": "^3.0.1", diff --git a/app/src/components/I18n/Flag.js b/app/src/components/I18n/Flag.js new file mode 100644 index 0000000..4b62960 --- /dev/null +++ b/app/src/components/I18n/Flag.js @@ -0,0 +1,10 @@ +import React from 'react' + +// Componente bem simples que recebe uma imagem +// e se está selecionada ou não (apenas para efeitos visuais) + +const Flag = ({ image, isSelected, ...props }) => ( + flag +) + +export default Flag \ No newline at end of file diff --git a/app/src/components/I18n/I18n.js b/app/src/components/I18n/I18n.js new file mode 100644 index 0000000..c5b92fc --- /dev/null +++ b/app/src/components/I18n/I18n.js @@ -0,0 +1,38 @@ +import React from 'react' +import { useTranslation } from 'react-i18next' +// useTranslation é um hook +// que devolve uma função de tradução (t) e a instância do i18n + +// Importa as bandeiras (imagens e componente) +import { BrasilFlag, EuaFlag } from 'assets' +import Flag from './Flag' + +const I18n = () => { + const { i18n } = useTranslation() + // Instância do i18n + + function handleChangeLanguage(language) { + // Trocando o idioma na chamada da função + i18n.changeLanguage(language) + } + + const selectedLanguage = i18n.language // Idioma selecionado + return ( +
+ // Bandeira do Brasil + handleChangeLanguage('pt-BR')} // Troca o idioma para pt-BR + /> + // Bandeira dos EUA + handleChangeLanguage('en-US')} // Troca o idioma para en-US + /> +
+ ) +} + +export default I18n \ No newline at end of file diff --git a/app/src/components/I18n/Translator.js b/app/src/components/I18n/Translator.js new file mode 100644 index 0000000..3f547fd --- /dev/null +++ b/app/src/components/I18n/Translator.js @@ -0,0 +1,12 @@ +import { useTranslation } from 'react-i18next' +// Importamos o hook + +const Translator = ({ path }) => { + const { t } = useTranslation() // Função que traduz + + // Retornamos a função passando como parametro o caminho (path) + // de onde está localizado o texto que desejamos traduzir + return t(path) +} + +export default Translator \ No newline at end of file diff --git a/app/src/i18n/index.js b/app/src/i18n/index.js new file mode 100644 index 0000000..07e319a --- /dev/null +++ b/app/src/i18n/index.js @@ -0,0 +1,25 @@ +// Importando as dependências +import i18n from 'i18next' +import LanguageDetector from 'i18next-browser-languagedetector' +import { initReactI18next } from 'react-i18next' + +// NO PRÓXIMO PASSO EU MOSTRO AS TRADUÇÕES +// Buscando as nossas traduções da pasta locales (nome e local da pasta é você quem decide) +import translations from './locales' + +// Configuração i18n +const i18nConfig = { + resources: translations, // resources são as nossas traduções + fallbackLng: 'pt-BR', // fallbackLng é o idioma padrão caso o browser não consiga detectar sozinho + defaultNS: 'translations' // defaultNS é o namespace padrão, podemos usar 'translations' +} + +// Não vou entrar no assunto namespaces, nem em configurações mais complexas +// O objetivo é simplicidade + +i18n + .use(LanguageDetector) // Usa o detector de idioma do seu browser + .use(initReactI18next) // Usa o pacote do i18n específico para React + .init(i18nConfig) // Usa nossas configurações + +export default i18n \ No newline at end of file diff --git a/app/src/i18n/locales/en-us.js b/app/src/i18n/locales/en-us.js new file mode 100644 index 0000000..a03588d --- /dev/null +++ b/app/src/i18n/locales/en-us.js @@ -0,0 +1,7 @@ +export default { + translations: { // Mesmo valor usado nas configurações (defaultNS) + home: { + message: 'Hello World!' + } + } + } \ No newline at end of file diff --git a/app/src/i18n/locales/index.js b/app/src/i18n/locales/index.js new file mode 100644 index 0000000..7f231ab --- /dev/null +++ b/app/src/i18n/locales/index.js @@ -0,0 +1,9 @@ +// Por último, importamos tudo e exportamos um único objeto + +import ptBrTranslations from './pt-br' +import enUsTranslations from './en-us' + +export default { + 'pt-BR': ptBrTranslations, // Atente-se a usar as abreviaturas corretas + 'en-US': enUsTranslations // https://support.mozilla.org/pt-BR/kb/abreviacao-de-localizacao +} \ No newline at end of file diff --git a/app/src/i18n/locales/pt-br.js b/app/src/i18n/locales/pt-br.js new file mode 100644 index 0000000..65b3889 --- /dev/null +++ b/app/src/i18n/locales/pt-br.js @@ -0,0 +1,7 @@ +export default { + translations: { // Mesmo valor usado nas configurações (defaultNS) + home: { + message: 'Olá Mundo!' + } + } + } \ No newline at end of file diff --git a/app/src/index.js b/app/src/index.js index 7af3a91..c612167 100644 --- a/app/src/index.js +++ b/app/src/index.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import { Provider } from "react-redux"; import configureStore from "./ducks/index"; +import './i18n'; import App from './pages/App'; import * as serviceWorker from './serviceWorker'; From 678ce7a151e02d1f4b0aa9d49d6a51e8afc3e1c0 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 8 Apr 2021 00:23:44 -0300 Subject: [PATCH 2/9] Fix initial i18n cofig --- app/src/components/I18n/Flag.js | 10 --- app/src/components/I18n/I18n.js | 38 ----------- app/src/components/I18n/Translator.js | 12 ---- app/src/components/MenuNavbar.js | 7 ++- app/src/i18n/locales/en-us.js | 7 --- app/src/i18n/locales/index.js | 9 --- app/src/i18n/locales/pt-br.js | 7 --- app/src/index.js | 1 - app/src/pages/StoriesPage.js | 3 +- app/src/pages/StoryEditPage.js | 5 +- app/src/{i18n/index.js => translate/i18n.js} | 10 +-- app/src/translate/languages/en.js | 58 +++++++++++++++++ app/src/translate/languages/index.js | 12 ++++ app/src/translate/languages/pt.js | 58 +++++++++++++++++ app/src/utils/messages.js | 66 ++++++++++---------- 15 files changed, 176 insertions(+), 127 deletions(-) delete mode 100644 app/src/components/I18n/Flag.js delete mode 100644 app/src/components/I18n/I18n.js delete mode 100644 app/src/components/I18n/Translator.js delete mode 100644 app/src/i18n/locales/en-us.js delete mode 100644 app/src/i18n/locales/index.js delete mode 100644 app/src/i18n/locales/pt-br.js rename app/src/{i18n/index.js => translate/i18n.js} (66%) create mode 100644 app/src/translate/languages/en.js create mode 100644 app/src/translate/languages/index.js create mode 100644 app/src/translate/languages/pt.js diff --git a/app/src/components/I18n/Flag.js b/app/src/components/I18n/Flag.js deleted file mode 100644 index 4b62960..0000000 --- a/app/src/components/I18n/Flag.js +++ /dev/null @@ -1,10 +0,0 @@ -import React from 'react' - -// Componente bem simples que recebe uma imagem -// e se está selecionada ou não (apenas para efeitos visuais) - -const Flag = ({ image, isSelected, ...props }) => ( - flag -) - -export default Flag \ No newline at end of file diff --git a/app/src/components/I18n/I18n.js b/app/src/components/I18n/I18n.js deleted file mode 100644 index c5b92fc..0000000 --- a/app/src/components/I18n/I18n.js +++ /dev/null @@ -1,38 +0,0 @@ -import React from 'react' -import { useTranslation } from 'react-i18next' -// useTranslation é um hook -// que devolve uma função de tradução (t) e a instância do i18n - -// Importa as bandeiras (imagens e componente) -import { BrasilFlag, EuaFlag } from 'assets' -import Flag from './Flag' - -const I18n = () => { - const { i18n } = useTranslation() - // Instância do i18n - - function handleChangeLanguage(language) { - // Trocando o idioma na chamada da função - i18n.changeLanguage(language) - } - - const selectedLanguage = i18n.language // Idioma selecionado - return ( -
- // Bandeira do Brasil - handleChangeLanguage('pt-BR')} // Troca o idioma para pt-BR - /> - // Bandeira dos EUA - handleChangeLanguage('en-US')} // Troca o idioma para en-US - /> -
- ) -} - -export default I18n \ No newline at end of file diff --git a/app/src/components/I18n/Translator.js b/app/src/components/I18n/Translator.js deleted file mode 100644 index 3f547fd..0000000 --- a/app/src/components/I18n/Translator.js +++ /dev/null @@ -1,12 +0,0 @@ -import { useTranslation } from 'react-i18next' -// Importamos o hook - -const Translator = ({ path }) => { - const { t } = useTranslation() // Função que traduz - - // Retornamos a função passando como parametro o caminho (path) - // de onde está localizado o texto que desejamos traduzir - return t(path) -} - -export default Translator \ No newline at end of file diff --git a/app/src/components/MenuNavbar.js b/app/src/components/MenuNavbar.js index 35d184d..25456d8 100644 --- a/app/src/components/MenuNavbar.js +++ b/app/src/components/MenuNavbar.js @@ -5,6 +5,7 @@ import UtterIcon from '../icons/UtterIcon'; import IntentIcon from '../icons/IntentIcon'; import { Tab, Tabs } from '@material-ui/core'; import { makeStyles, withStyles } from '@material-ui/core/styles'; +import i18n from '../translate/i18n' import AppIcon from '../icons/AppIcon'; import Button from '@material-ui/core/Button'; @@ -75,9 +76,9 @@ export default function MenuNavbar() { value={value} onChange={handleChange} centered> - } label="Diálogos" to="/" component={Link} /> - } label="Perguntas" to="/intents/new" component={Link} /> - } label="Respostas" to="/utters/new" component={Link} /> + } label={i18n.t('menu_nav_bar.dialogues')} to="/" component={Link} /> + } label={i18n.t('menu_nav_bar.questions')} to="/intents/new" component={Link} /> + } label={i18n.t('menu_nav_bar.answers')} to="/utters/new" component={Link} /> diff --git a/app/src/pages/StoryEditPage.js b/app/src/pages/StoryEditPage.js index 42a59ea..b1d79df 100644 --- a/app/src/pages/StoryEditPage.js +++ b/app/src/pages/StoryEditPage.js @@ -21,6 +21,7 @@ import DeletionConfirmationDialog from '../components/DeletionConfirmationDialog import { message } from '../utils/messages'; import { Add } from '../styles/button'; import { Link } from 'react-router-dom'; +import i18n from '../translate/i18n' const style = { grid_item_list: { @@ -137,7 +138,7 @@ class StoryEditPage extends Component { - Perguntas + {i18n.t('stories_edit_page.questions')} - Respostas + {i18n.t('stories_edit_page.answers')} Date: Thu, 8 Apr 2021 00:44:50 -0300 Subject: [PATCH 3/9] Add more sentences --- app/src/components/IntentForm.js | 3 ++- app/src/components/ListFilter.js | 3 ++- app/src/components/ToolbarName.js | 3 ++- app/src/components/UtterForm.js | 5 +++-- app/src/pages/StoriesPage.js | 2 +- app/src/pages/StoryEditPage.js | 2 +- app/src/translate/languages/en.js | 14 ++++++++++++-- app/src/translate/languages/pt.js | 12 +++++++++++- 8 files changed, 34 insertions(+), 10 deletions(-) diff --git a/app/src/components/IntentForm.js b/app/src/components/IntentForm.js index 0affcfd..a23837a 100644 --- a/app/src/components/IntentForm.js +++ b/app/src/components/IntentForm.js @@ -9,6 +9,7 @@ import IconButton from '@material-ui/core/IconButton'; import InputAdornment from '@material-ui/core/InputAdornment'; import Typography from '@material-ui/core/Typography'; import SnackbarDelete from './DeleteSnackbar' +import i18n from '../translate/i18n' import { Creators as IntentAction } from "../ducks/intents"; @@ -110,7 +111,7 @@ class IntentForm extends Component {
{ this.handleClick() }} > - Nova pergunta + {i18n.t('intent_form.new_question')}
diff --git a/app/src/components/ListFilter.js b/app/src/components/ListFilter.js index 37da849..4733bd1 100644 --- a/app/src/components/ListFilter.js +++ b/app/src/components/ListFilter.js @@ -3,6 +3,7 @@ import Typography from '@material-ui/core/Typography'; import TextField from '@material-ui/core/TextField'; import Divider from '@material-ui/core/Divider'; import ItemsList from "./ItemsList"; +import i18n from '../translate/i18n' import SearchIcon from '@material-ui/icons/Search'; import CloseIcon from '@material-ui/icons/Close'; @@ -79,7 +80,7 @@ export default class ListFilter extends Component { this.handleClick()} > - Gravar + {i18n.t('toolbar_name')} {this.getDeleteOption()} diff --git a/app/src/components/UtterForm.js b/app/src/components/UtterForm.js index 0d0c842..81fdb77 100644 --- a/app/src/components/UtterForm.js +++ b/app/src/components/UtterForm.js @@ -9,6 +9,7 @@ import DeleteIcon from '@material-ui/icons/Delete'; import TextField from '@material-ui/core/TextField'; import IconButton from '@material-ui/core/IconButton'; import Typography from '@material-ui/core/Typography'; +import i18n from '../translate/i18n' import { Creators as UtterAction } from '../ducks/utters'; import { DialogBoxPrimary, DialogBoxSecondary, NewPrimaryDialog, NewSecondaryDialog } from '../styles/dialog'; @@ -152,10 +153,10 @@ class UtterForm extends Component { {this.props.multiple_alternatives ? { this.handleClick() }}> - Novo balão de resposta + {i18n.t('uttter_form.new_balloon')} : { this.handleClick() }}> - Novo balão de resposta + {i18n.t('uttter_form.new_balloon')} } diff --git a/app/src/pages/StoriesPage.js b/app/src/pages/StoriesPage.js index 5f76d00..8203254 100644 --- a/app/src/pages/StoriesPage.js +++ b/app/src/pages/StoriesPage.js @@ -74,7 +74,7 @@ class StoriesPage extends Component { Date: Thu, 8 Apr 2021 00:49:00 -0300 Subject: [PATCH 4/9] Fix StoriesPage button --- app/src/pages/StoriesPage.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/pages/StoriesPage.js b/app/src/pages/StoriesPage.js index 8203254..1f33f04 100644 --- a/app/src/pages/StoriesPage.js +++ b/app/src/pages/StoriesPage.js @@ -66,7 +66,7 @@ class StoriesPage extends Component { From 601458afa9c4f7d20d1b62145663e3459f108573 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 8 Apr 2021 01:23:48 -0300 Subject: [PATCH 5/9] Fix label --- app/src/components/ExampleStory.js | 3 ++- app/src/translate/languages/en.js | 3 ++- app/src/translate/languages/index.js | 7 +++---- app/src/translate/languages/pt.js | 3 ++- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/src/components/ExampleStory.js b/app/src/components/ExampleStory.js index cddde83..05c888e 100644 --- a/app/src/components/ExampleStory.js +++ b/app/src/components/ExampleStory.js @@ -3,6 +3,7 @@ import { connect } from "react-redux"; import Typography from '@material-ui/core/Typography'; import { IntentBalloon, UtterFirstBalloon, UtterBalloon } from '../styles/exampleBalloon'; import { message } from '../utils/messages'; +import i18n from '../translate/i18n' const styles = { title: { @@ -85,7 +86,7 @@ class ExampleStory extends Component { return (
- {this.props.content.length !== 0 ? "Exemplo:" : message.no_examples} + {this.props.content.length !== 0 ? i18n.t('example_story') : message.no_examples} {this.getExamples()}
diff --git a/app/src/translate/languages/en.js b/app/src/translate/languages/en.js index e171fdb..8c9abf8 100644 --- a/app/src/translate/languages/en.js +++ b/app/src/translate/languages/en.js @@ -60,7 +60,8 @@ const messages = { }, uttter_form: { new_balloon: 'New answer balloon' - } + }, + example_story: 'Example:' } } } diff --git a/app/src/translate/languages/index.js b/app/src/translate/languages/index.js index eee2460..dbeccfd 100644 --- a/app/src/translate/languages/index.js +++ b/app/src/translate/languages/index.js @@ -3,10 +3,9 @@ import { messages as ptBrTranslations } from './pt' import { messages as enUsTranslations } from './en' -const messages = { - ... ptBrTranslations, - ... enUsTranslations -} +const messages={ + ...ptBrTranslations, + ...enUsTranslations} export default messages \ No newline at end of file diff --git a/app/src/translate/languages/pt.js b/app/src/translate/languages/pt.js index e967684..0f50892 100644 --- a/app/src/translate/languages/pt.js +++ b/app/src/translate/languages/pt.js @@ -60,7 +60,8 @@ const messages = { }, uttter_form: { new_balloon: 'Novo balão de resposta' - } + }, + example_story: 'Exemplo:' } } } From e690548ea9274972951d7d8bcdee80c6b41478f5 Mon Sep 17 00:00:00 2001 From: Rodrigo Maia Date: Wed, 14 Apr 2021 19:18:03 -0300 Subject: [PATCH 6/9] Apply RASA naming conventions Use "Story", "Intent" and "Utter" instead of "Dialog", "Question" and "Answer" --- app/src/components/MenuNavbar.js | 6 +-- app/src/pages/StoryEditPage.js | 4 +- app/src/translate/languages/en.js | 66 +++++++++++++++---------------- app/src/translate/languages/pt.js | 10 ++--- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/app/src/components/MenuNavbar.js b/app/src/components/MenuNavbar.js index 25456d8..43f2e75 100644 --- a/app/src/components/MenuNavbar.js +++ b/app/src/components/MenuNavbar.js @@ -76,9 +76,9 @@ export default function MenuNavbar() { value={value} onChange={handleChange} centered> - } label={i18n.t('menu_nav_bar.dialogues')} to="/" component={Link} /> - } label={i18n.t('menu_nav_bar.questions')} to="/intents/new" component={Link} /> - } label={i18n.t('menu_nav_bar.answers')} to="/utters/new" component={Link} /> + } label={i18n.t('menu_nav_bar.stories')} to="/" component={Link} /> + } label={i18n.t('menu_nav_bar.intents')} to="/intents/new" component={Link} /> + } label={i18n.t('menu_nav_bar.utters')} to="/utters/new" component={Link} /> ]} /> diff --git a/app/src/components/DeletionConfirmationDialog.js b/app/src/components/DeletionConfirmationDialog.js index bd8baac..8d9ab75 100644 --- a/app/src/components/DeletionConfirmationDialog.js +++ b/app/src/components/DeletionConfirmationDialog.js @@ -1,10 +1,10 @@ - import React from "react"; import { message } from '../utils/messages'; import { Button } from '@material-ui/core'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogTitle from '@material-ui/core/DialogTitle'; +import i18n from '../translate/i18n' const DeletionConfirmationDialog = ({ dialog_status, handleClose, deleteItem }) => { return ( @@ -19,14 +19,14 @@ const DeletionConfirmationDialog = ({ dialog_status, handleClose, deleteItem }) color="primary" onClick={() => handleClose(false)} > - Cancelar + {i18n.t('delete_confirmation_dialog.cancel')} diff --git a/app/src/components/ToolbarName.js b/app/src/components/ToolbarName.js index 602b89e..a4d5d4b 100644 --- a/app/src/components/ToolbarName.js +++ b/app/src/components/ToolbarName.js @@ -19,7 +19,7 @@ const style = { }, } -const options = ['Apagar'] +const options = [i18n.t('toolbar_name.delete')] export default class ToolbarName extends Component { constructor(props) { @@ -44,7 +44,7 @@ export default class ToolbarName extends Component { options.map(option => ( this.handleDelete()} > {option} @@ -127,7 +127,7 @@ export default class ToolbarName extends Component { disabled={!this.props.is_enabled} onClick={() => this.handleClick()} > - {i18n.t('toolbar_name')} + {i18n.t('toolbar_name.save')} {this.getDeleteOption()} diff --git a/app/src/translate/languages/en.js b/app/src/translate/languages/en.js index d70748f..d789be8 100644 --- a/app/src/translate/languages/en.js +++ b/app/src/translate/languages/en.js @@ -21,6 +21,11 @@ const messages = { no_special_char: "Use only letters without accents, numbers or _", no_dialogs: "Click on intents and utters to set up a story", delete_confirmation: "Delete item?", + delete_confirmation_dialog: { + delete: "Delete", + cancel: "Cancel" + }, + delete_snackbar: "Undo", exportar_conteudo: 'Export content', story: { created: "Story created", @@ -53,7 +58,10 @@ const messages = { placeholder: "Ex: Utter_General_Greet, Utter_How_To_Register", name_good_pratice: "To identify utters clearly, use 'Utter_' and the title of the corresponding question, if any", }, - toolbar_name: "Save", + toolbar_name: { + save: "Save", + delete: "Delete" + }, list_filter: 'Filter', intent_form: { new_question: 'New intent' diff --git a/app/src/translate/languages/pt.js b/app/src/translate/languages/pt.js index 39ffb84..206799a 100644 --- a/app/src/translate/languages/pt.js +++ b/app/src/translate/languages/pt.js @@ -21,6 +21,11 @@ const messages = { no_special_char: "Use apenas letras sem acentos, números ou _", no_dialogs: "Clique nas perguntas e nas respostas para montar um diálogo", delete_confirmation: "Apagar item?", + delete_confirmation_dialog: { + delete: "Apagar", + cancel: "Cancelar" + }, + delete_snackbar: "Desfazer", exportar_conteudo: 'Exportar conteúdo', story: { created: "Diálogo criado", @@ -53,7 +58,10 @@ const messages = { placeholder: "Ex: Resp_Geral_Cumprimentar, Resp_Servico_Como_Cadastrar", name_good_pratice: "Para identificar as respostas claramente, use 'Resp_' e o título da pergunta correspondente, se existir", }, - toolbar_name: "Gravar", + toolbar_name: { + save: "Gravar", + delete: "Apagar" + }, list_filter: 'Filtrar', intent_form: { new_question: 'Nova pergunta' @@ -64,6 +72,4 @@ const messages = { example_story: 'Exemplo:' } } -} - -export { messages } \ No newline at end of file +} \ No newline at end of file From d7c785cbdc2fcdfbc7de979024f66b77d710dbfe Mon Sep 17 00:00:00 2001 From: Gabriel Date: Wed, 5 May 2021 18:38:15 -0300 Subject: [PATCH 9/9] fix portuguese translation --- app/src/translate/languages/pt.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/translate/languages/pt.js b/app/src/translate/languages/pt.js index 206799a..9417a84 100644 --- a/app/src/translate/languages/pt.js +++ b/app/src/translate/languages/pt.js @@ -72,4 +72,6 @@ const messages = { example_story: 'Exemplo:' } } -} \ No newline at end of file +} + +export { messages } \ No newline at end of file