Skip to content
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

I18n poc #165

Draft
wants to merge 82 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
906a8f8
Adiciona a dependência do @angular/localize para habilitar a tradução…
lguima Aug 12, 2023
4aa7512
Adiciona a dependência do @angular/localize para habilitar a tradução…
lguima Aug 12, 2023
f9800c5
Cria um comando para extrair os textos marcado para tradução
lguima Aug 12, 2023
dfb7af1
Atualização automática do arquivo Polyfills
lguima Aug 12, 2023
f16a7be
Define o idioma principal como Português e Inglês (EUA) como alternativo
lguima Aug 12, 2023
19af1c9
Habilita a localização na build e define o nível de validação como erro
lguima Aug 12, 2023
7c7acad
Cria uma configuração de build para o idioma Inglês (EUA)
lguima Aug 12, 2023
c493dac
Cria uma configuração de servidor para o idioma Inglês (EUA)
lguima Aug 12, 2023
b37f013
Versiona arquivo de tradução para o idioma principal (Português)
lguima Aug 12, 2023
8dad2ce
Versiona arquivo de tradução para o Inglês (EUA)
lguima Aug 12, 2023
356f68d
Mapeia um texto de teste para tradução
lguima Aug 16, 2023
c60957a
Cria arquivo de configuração do Netlify
lguima Aug 16, 2023
ddca967
Adiciona regra de redirecionamento para en-US
lguima Aug 16, 2023
02a4b36
Atualiza regra de redirecionamento para pt
lguima Aug 16, 2023
9416ffd
Remove a barra inicial da URL
lguima Aug 16, 2023
b23f3fc
Remove a barra inicial da URL
lguima Aug 16, 2023
7c750c4
Corrige o caminho dos assets
lguima Aug 16, 2023
b57a54d
Corrige o caminho dos assets
lguima Aug 17, 2023
2233368
Corrige o caminho dos assets
lguima Aug 17, 2023
677388a
Redireciona os acessos para PT por padrão
lguima Aug 17, 2023
6dbef99
Remove temporariamente as URLs criadas para en-US
lguima Oct 8, 2023
c6653c4
Altera a ordem das regras de redirecionamento do Netlify
lguima Oct 8, 2023
0f67f92
Atualiza regra de redirecionamento para en-US
lguima Oct 8, 2023
089f48d
Troca o caminho absoluto por relativo
lguima Oct 8, 2023
448b792
Desabilita o redirecionamento de en-US
lguima Oct 8, 2023
0eddba0
Define o idioma en-US como padrão
lguima Oct 8, 2023
142f718
Define regra para redirecionamento para 'pt' quando houver o idioma n…
lguima Oct 8, 2023
6cb8bcb
Coloca a importação do módulo de rotas por último
lguima Oct 8, 2023
1f8f803
Cria uma regra genérica para redirecionar para a página inicial
lguima Oct 8, 2023
7bdf186
Define o idioma 'pt' como default e redireciona para 'en-US' quando o…
lguima Oct 8, 2023
f63557d
Expõe a lista de idiomas e a localização atual
lguima Oct 10, 2023
c99eb74
Cria links para os idiomas mapeados
lguima Oct 10, 2023
553c033
Troca o idioma en-US por en
lguima Oct 15, 2023
77fa2fb
Troca o idioma en-US por en
lguima Oct 15, 2023
57b2033
Troca o idioma en-US por en
lguima Oct 15, 2023
d5425d1
Troca o idioma en-US por en
lguima Oct 15, 2023
3f2685f
Atualiza o rótulo do idioma Português
lguima Oct 26, 2023
7867b27
[WIP] Cria uma função para manipular a troca de idioma
lguima Oct 26, 2023
4f37276
[WIP] Renderiza o seletor de idioma
lguima Oct 26, 2023
b4f5e65
[WIP] Utiliza o Location para redirecionar
lguima Oct 26, 2023
66a89af
[WIP] Utiliza o Router para redirecionar
lguima Oct 26, 2023
cf68843
[WIP] Utiliza o Router para redirecionar
lguima Oct 26, 2023
b40d649
[WIP] Utiliza o Location para redirecionar
lguima Oct 26, 2023
e1b449d
[WIP] Utiliza o Location para redirecionar
lguima Oct 26, 2023
e403922
[WIP] Monta uma URL simples para redirecionar
lguima Oct 26, 2023
201596b
[WIP] Simplifica o redirecionamento
lguima Oct 26, 2023
9ade55a
Merge branch 'main' into i18n-poc
tigreped Oct 26, 2023
1cdb97b
Cria classe para itens além de âncoras no menu superior
lguima Oct 28, 2023
acc1890
Reestrutura o menu de idiomas
lguima Oct 28, 2023
b4d0ee1
Substitui CSS puro por classes utilitárias do TailwindCSS
lguima Oct 28, 2023
4e328fa
Atualiza o link para utilizar o router
lguima Oct 30, 2023
bc9516a
Atualiza o menu mobile
lguima Oct 30, 2023
b92d51f
Atualiza o comando para rodar o projeto
lguima Oct 30, 2023
850c64c
Substitui o router por href
lguima Oct 30, 2023
918a9d5
Adiciona o atributo target
lguima Oct 30, 2023
74ad73c
Cria página 404
lguima Oct 31, 2023
ea2578c
Expõe a página 404
lguima Oct 31, 2023
fba02aa
Redireciona URLs não existentes para a página 404
lguima Oct 31, 2023
b9de69d
Substitui o href pelo router
lguima Oct 31, 2023
c2ee2ba
Adiciona um ponto no início do caminho
lguima Oct 31, 2023
a21dc56
Substitui o router por href
lguima Oct 31, 2023
11e1aab
Adiciona outro ponto no início do caminho
lguima Oct 31, 2023
34515a6
Cria uma string para teste
lguima Oct 31, 2023
fa5e788
Usa a string de teste como URL
lguima Oct 31, 2023
e179c49
Cria links com diversas possíveis soluções
lguima Oct 31, 2023
ba849e1
Update header.component.html
lguima Oct 31, 2023
b61a28a
Update netlify.toml
lguima Nov 1, 2023
ff7ba10
Update header.component.html
lguima Nov 1, 2023
e7aaf0c
Update header.component.html
lguima Nov 1, 2023
2839544
Update header.component.html
lguima Nov 1, 2023
31bcf95
Remove código de teste
lguima Nov 1, 2023
d16736d
Remove configuração de página 404
lguima Nov 1, 2023
ce7b051
Remove página 404
lguima Nov 1, 2023
1a9aa30
Cria componente para página 404
lguima Nov 1, 2023
bac8700
Mapeia o componente para página 404
lguima Nov 1, 2023
ca5b23f
Define uma rota curinga para a página 404
lguima Nov 1, 2023
39a5041
Define os itens do menu superior para serem traduzidos
lguima Nov 1, 2023
85cd6c4
Atualiza os arquivos de tradução
lguima Nov 1, 2023
8b4bcef
Define o rótulo de troca de idioma para ser traduzidos
lguima Nov 1, 2023
fccdcbd
Atualiza os arquivos de tradução
lguima Nov 1, 2023
b3b09e4
Adiciona significado às strings mapeadas para tradução
lguima Nov 1, 2023
def501a
Atualiza os arquivos de tradução
lguima Nov 1, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@
"projects": {
"querido-diario": {
"projectType": "application",
"i18n": {
"sourceLocale": "pt",
"locales": {
"en": "src/locales/messages.en.xlf"
}
},
"schematics": {
"@schematics/angular:component": {
"style": "sass"
Expand All @@ -25,6 +31,8 @@
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"localize": true,
"i18nMissingTranslation": "error",
"aot": true,
"assets": [
"src/favicon.ico",
Expand Down Expand Up @@ -64,6 +72,9 @@
"maximumError": "5mb"
}
]
},
"en": {
"localize": ["en"]
}
}
},
Expand All @@ -75,6 +86,9 @@
"configurations": {
"production": {
"browserTarget": "querido-diario:build:production"
},
"en": {
"browserTarget": "querido-diario:build:en"
}
}
},
Expand Down
2 changes: 1 addition & 1 deletion docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Para mais detalhes ou informações sobre a configuração em outros sistemas op
# Como executar
1. Com o terminal aberto no diretório raíz do repositório, o projeto pode ser servido localmente com o comando:
``` console
yarn ng serve
yarn serve
```
2. Durante a execução, um log aparecerá no terminal. O trecho final, como este a seguir, informa em qual porta a visualização do site está hospedada. Basta copiar o endereço `http` e abrir no navegador.
```
Expand Down
19 changes: 19 additions & 0 deletions netlify.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
[build]
publish = "dist/querido-diario"
command = "ng build --prod"

[[redirects]]
from = "/*"
to = "/en/index.html"
status = 200
conditions = {Language = ["en"]}

[[redirects]]
from = "/en/*"
to = "/en/index.html"
status = 200

[[redirects]]
from = "/*"
to = "/pt/index.html"
status = 200
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@
"heroku-postbuild": "ng build --prod",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
"e2e": "ng e2e",
"i18n:extract": "ng extract-i18n --output-path src/locales"
},
"private": true,
"engines": {
Expand All @@ -24,6 +25,7 @@
"@angular/core": "~11.2.11",
"@angular/flex-layout": "12.0.0-beta.34",
"@angular/forms": "~11.2.11",
"@angular/localize": "11.2.11",
"@angular/material": "^11.2.11",
"@angular/material-moment-adapter": "^12.0.2",
"@angular/platform-browser": "~11.2.11",
Expand Down
10 changes: 3 additions & 7 deletions src/app/app-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,16 @@ import { SearchTutorialComponent } from './modules/pages/search-tutorial/search-
import { SuggestionComponent } from './modules/pages/suggestion/suggestion.component';
import { SupportComponent } from './modules/pages/support/support.component';
import { TechComponent } from './modules/pages/tech/tech.component';
import { AboutComponent as AboutComponentEnUS } from './modules/pages/about-en_US/about.component';
import { TechComponent as TechComponentEnUS } from './modules/pages/tech-en_US/tech.component';
import { PrivacyPolicyComponent as PrivacyPolicyComponentEnUS } from './modules/pages/privacy-policy-en_US/privacy-policy.component';

import { PageNotFoundComponent } from './modules/pages/page-not-found/page-not-found.component';

const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'sobre', component: AboutComponent },
{ path: 'en-US/sobre', component: AboutComponentEnUS },
{ path: 'privacidade', component: PrivacyPolicyComponent },
{ path: 'en-US/privacidade', component: PrivacyPolicyComponentEnUS },
{ path: 'informacoes', component: ComplaintComponent },
{ path: 'acesso', component: AccessLevelsComponent },
{ path: 'apoie', component: SupportComponent },
{ path: 'tecnologia', component: TechComponent },
{ path: 'en-US/tecnologia', component: TechComponentEnUS },
{ path: 'sugestao', component: SuggestionComponent },
{ path: 'glossario', component: GlossaryComponent },
{ path: 'pesquisa', component: SearchComponent },
Expand All @@ -58,6 +52,8 @@ const routes: Routes = [
{ path: 'educacao/relatorio/:id', component: ReportDetailComponent },
{ path: 'educacao/caso/:id', component: ReportDetailComponent },
{ path: 'educacao/redefinir-senha', component: PassResetComponent },

{ path: '**', component: PageNotFoundComponent }
];

@NgModule({
Expand Down
2 changes: 1 addition & 1 deletion src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export class AppComponent {
Icons.map((icon) => {
this.matIconRegistry.addSvgIcon(
icon,
this.sanitizer.bypassSecurityTrustResourceUrl(`../assets/icons/${icon}.svg`)
this.sanitizer.bypassSecurityTrustResourceUrl(`assets/icons/${icon}.svg`)
)
})
}
Expand Down
6 changes: 3 additions & 3 deletions src/app/app.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -110,8 +110,7 @@ import { ResetPassModalComponent } from './modules/pages/area-education/header/r
import { AboutComponent as AboutComponentEnUS } from './modules/pages/about-en_US/about.component';
import { TechComponent as TechComponentEnUS } from './modules/pages/tech-en_US/tech.component';
import { PrivacyPolicyComponent as PrivacyPolicyComponentEnUS } from './modules/pages/privacy-policy-en_US/privacy-policy.component';


import { PageNotFoundComponent } from './modules/pages/page-not-found/page-not-found.component';

@NgModule({
declarations: [
Expand Down Expand Up @@ -190,10 +189,10 @@ import { PrivacyPolicyComponent as PrivacyPolicyComponentEnUS } from './modules/
AboutComponentEnUS,
TechComponentEnUS,
PrivacyPolicyComponentEnUS,
PageNotFoundComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MatGridListModule,
MatMenuModule,
Expand All @@ -217,6 +216,7 @@ import { PrivacyPolicyComponent as PrivacyPolicyComponentEnUS } from './modules/
IvyCarouselModule,

NgxPaginationModule,
AppRoutingModule,
],
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },
Expand Down
4 changes: 2 additions & 2 deletions src/app/modules/components/carousel/carousel.component.sass
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@

.carousel-arrow-prev
left: 0 !important
background-image: url('/assets/icons/slide-left.svg') !important
background-image: url('../../../../assets/icons/slide-left.svg') !important

.carousel-arrow-next
right: 0 !important
background-image: url('/assets/icons/slide-right.svg') !important
background-image: url('../../../../assets/icons/slide-right.svg') !important
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="content">
<div class="levels">
<div class="level" *ngIf="levels.length && levels.includes(1)" [style]="{width: 'calc((100%/' + levels.length + ') - 40px)'}">
<div class="level-icon"><img src="/assets/icons/pin.svg"/></div>
<div class="level-icon"><img src="assets/icons/pin.svg"/></div>
<div class="level-title">Nível 1 de acesso</div>
<div class="level-text">Possuímos a fonte de publicação do diário oficial deste município.</div>
<div class="cities level-1">
Expand All @@ -14,7 +14,7 @@
</div>

<div class="level" *ngIf="levels.length && levels.includes(2)" [style]="{width: 'calc((100%/' + levels.length + ') - 40px)'}">
<div class="level-icon"><img src="/assets/icons/search.svg"/></div>
<div class="level-icon"><img src="assets/icons/search.svg"/></div>
<div class="level-title">Nível 2 de acesso</div>
<div class="level-text">
Temos o script para coletar os arquivos e armazená-los em nossa base.<br/>
Expand All @@ -29,7 +29,7 @@
</div>

<div class="level" *ngIf="levels.length && levels.includes(3)" [style]="{width: 'calc((100%/' + levels.length + ') - 40px)'}">
<div class="level-icon"><img src="/assets/icons/check.svg"/></div>
<div class="level-icon"><img src="assets/icons/check.svg"/></div>
<div class="level-title">Nível 3 de acesso</div>
<div class="level-text">o conteúdo dos diários oficiais deste município está disponível na plataforma Querido Diário.</div>
<div class="cities level-3">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,4 @@
top: calc(50% - 5px)
background-position: center
background-repeat: no-repeat
background-image: url('/assets/icons/right-arrow-white.svg')
background-image: url('../../../../assets/icons/right-arrow-white.svg')
99 changes: 70 additions & 29 deletions src/app/modules/components/header/header.component.html
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
<app-row class="row-header">
<header fxLayout="row">
<div class="container">
<a routerLink="/"><mat-icon svgIcon="logo" class="logo"></mat-icon></a>
<a routerLink="/">
<mat-icon svgIcon="logo" class="logo"></mat-icon>
</a>

<nav fxHide.xs fxLayoutGap="32px" *ngIf="!hideMenu">
<a routerLink="/" #explore>Explore</a>
<a routerLink="/tecnologia">Tecnologia</a>
<a routerLink="/blog">Blog</a>
<a routerLink="/educacao">Educação</a>
<a routerLink="/sobre">Sobre</a>
<a routerLink="/" #explore i18n="menu superior|Item do menu superior para a página inicial">Explore</a>
<a routerLink="/tecnologia" i18n="menu superior|Item do menu superior para a página de Tecnologia">Tecnologia</a>
<a routerLink="/blog" i18n="menu superior|Item do menu superior para a página de Blog">Blog</a>
<a routerLink="/educacao" i18n="menu superior|Item do menu superior para a página de Educação">Educação</a>
<a routerLink="/sobre" i18n="menu superior|Item do menu superior para a página Sobre">Sobre</a>
<a fxLayout="center" (click)="openNotifications()">
<app-icon [icon]="notificationIcon"></app-icon>
</a>
<button routerLink="/apoie" class="btn">Apoie</button>
<button routerLink="/apoie" class="btn" i18n="menu superior|Item do menu superior para a página de Apoie">Apoie</button>

<button mat-icon-button [matMenuTriggerFor]="languageSwitcher" aria-label="Seletor de idioma" class="top-header-menu-item">
<mat-icon>language</mat-icon>
</button>
<mat-menu #languageSwitcher="matMenu" xPosition="before" class="language-switcher-menu">
<ng-container *ngFor="let language of languageList">
<a href="../{{language.code}}{{router.url}}" target="_self">
<button mat-menu-item [attr.data-language-code]="language.code">
<span>{{language.label}}</span>
</button>
</a>
</ng-container>
</mat-menu>
</nav>
<a *ngIf="!hideMenu" (click)="openDialog()" id="support" fxHide fxHide.xs="false">
<mat-icon svgIcon="bars" class="bars"></mat-icon>
Expand All @@ -22,25 +38,27 @@
</header>
</app-row>


<div class="suspended-menu" *ngIf="mobileMenuOpen" (click)="onClickLink()">
<a routerLink="/" #explore><div class="link bg-white">
Explore
</div></a>
<a routerLink="/tecnologia"><div class="link bg-white">
Tecnologia
</div></a>
<a routerLink="/blog"><div class="link bg-white">
Blog
</div></a>
<a routerLink="/sobre"><div class="link bg-white">
Sobre
</div></a>
<a routerLink="/apoie"><div class="link bg-orange">
Apoie
</div></a>
<a routerLink="/" #explore>
<div class="link bg-white" i18n="menu superior|Item do menu superior para a página inicial">Explore</div>
</a>
<a routerLink="/tecnologia">
<div class="link bg-white" i18n="menu superior|Item do menu superior para a página de Tecnologia">Tecnologia</div>
</a>
<a routerLink="/blog">
<div class="link bg-white" i18n="menu superior|Item do menu superior para a página de Blog">Blog</div>
</a>
<a routerLink="/sobre">
<div class="link bg-white" i18n="menu superior|Item do menu superior para a página Sobre">Sobre</div>
</a>
<a routerLink="/apoie">
<div class="link bg-orange" i18n="menu superior|Item do menu superior para a página de Apoie">Apoie</div>
</a>

<a routerLink="/educacao/">
<div class="link divider bg-purple">Tecnologias na Educação</div>
</a>

<a routerLink="/educacao/"><div class="link divider bg-purple">Tecnologias na Educação</div></a>
<div *ngIf="userData.full_name" class="user-name link">
Olá, {{userData.full_name.split(' ')[0]}}
</div>
Expand All @@ -57,10 +75,33 @@
<!-- <a><div class="link bg-purple"> -->
<!-- Estudos de caso -->
<!-- </div></a> -->
<a routerLink="/educacao/busca"><div class="link bg-purple">

<a routerLink="/educacao/busca">
<div class="link bg-purple">
Busca
</div></a>
<a routerLink="/educacao/sobre"><div class="link bg-purple">
Sobre
</div></a>
</div>
</a>
<a routerLink="/educacao/sobre">
<div class="link bg-purple">
Sobre
</div>
</a>

<a (click)="$event.stopPropagation()" (keydown)="$event.stopPropagation()">
<div class="link bg-white">
<button mat-icon-button [matMenuTriggerFor]="languageSwitcher" aria-label="Seletor de idioma">
<mat-icon>language</mat-icon>
<span i18n="Rótulo do botão para trocar de idioma">Idioma</span>
</button>
</div>
</a>
<mat-menu #languageSwitcher="matMenu" xPosition="before">
<ng-container *ngFor="let language of languageList">
<a href="../{{language.code}}{{router.url}}" (click)="onClickLink()" target="_self">
<button mat-menu-item [attr.data-language-code]="language.code">
<span>{{language.label}}</span>
</button>
</a>
</ng-container>
</mat-menu>
</div>
15 changes: 4 additions & 11 deletions src/app/modules/components/header/header.component.sass
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,8 @@ header
nav
display: flex

a
color: #5e3f8e
font-family: Lato
font-size: rem(16)
font-weight: 600
letter-spacing: 0
line-height: rem(28)
align-self: center
a, .top-header-menu-item
@apply self-center font-lato text-[#5e3f8e] font-semibold text-base tracking-normal leading-7

button.btn
height: rem(42)
Expand All @@ -40,7 +34,6 @@ header
text-align: center
align-self: center
border: none


.logo
height: rem(36)
Expand Down Expand Up @@ -97,7 +90,7 @@ header

&.bg-orange, &.bg-purple, &.bg-dark-purple, &.login
&::after
background-image: url('/assets/icons/right-arrow-white.svg')
background-image: url('../../../../assets/icons/right-arrow-white.svg')

&.bg-orange
background-color: rgba(255, 133, 0, 1)
Expand All @@ -115,7 +108,7 @@ header
top: calc(50% - 5px)
width: rem(5)
height: rem(10)
background-image: url('/assets/icons/right-arrow-purple-dark.svg')
background-image: url('../../../../assets/icons/right-arrow-purple-dark.svg')
background-position: center

.user-name, .logged-link, .login
Expand Down
9 changes: 7 additions & 2 deletions src/app/modules/components/header/header.component.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';
import { Component, ElementRef, Inject, LOCALE_ID, OnInit, ViewChild } from '@angular/core';
import { MatDialog } from '@angular/material/dialog';
import { Router } from '@angular/router';
import { UserModel } from 'src/app/interfaces/account';
Expand All @@ -20,13 +20,18 @@ export class HeaderComponent implements OnInit {
userData: UserModel = {};
urlsHide = ['/educacao/cadastrar'];
hideMenu = false;
languageList = [
{ code: 'pt', label: 'Português (BR)' },
{ code: 'en', label: 'English (US)' }
];

constructor(
private userQuery: UserQuery,
private modal: MatDialog,
private contentService: ContentService,
private userService: UserService,
private router: Router,
public router: Router,
@Inject(LOCALE_ID) public localeId: string
) {}

notificationIcon: IconType = {
Expand Down
Loading