Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions src/app/exercises/distinct/distinct.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>El operador pipe nos permite ejecutar diferentes operadores RxJs uno después de otro en orden, para obtener las frutas tal y como las necesitamos</p>
<p>En nuestro caso, el operador <code class="help" [appTooltip]="tooltip">distinct</code> nos ayudará. Este prevendrá frutas duplicadas sean entregadas en nuestro flujo de datos<a href="https://rxjs.dev/api/operators/distinct" target="_blank">(Aprende más sobre distinct)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Oh, não! Estamos recebendo mais frutas do que a receita pede.</p>
<p>O operador <code>pipe</code> nos permite executar diferentes operadores RxJS um após o outro para obtermos as frutas da forma que precisamos.</p>
<p>No nosso caso, o operador <code class="help" [appTooltip]="tooltip">distinct</code> nos ajudará. Ele impede que frutas duplicadas sejam entregues em nosso fluxo de dados. <a href="https://rxjs.dev/api/operators/distinct" target="_blank">(Aprenda mais sobre distinct)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="distinctCode"></code>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<a href="https://rxjs.dev/api/operators/distinctUntilChanged" target="_blank">(Aprende más acerca de distinctUntilChanged)</a>
</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Uma após a outra! Algumas frutas vieram duas vezes consecutivas. Entretanto, precisamos delas alternadas..</p>
<p>Em nosso caso, o operador <code class="help" [appTooltip]="tooltip">distinctUntilChanged</code> nos ajudará. Ele evita que as frutas duplicadas sejam entregues uma após a outra em nosso fluxo de dados.
<a href="https://rxjs.dev/api/operators/distinctUntilChanged" target="_blank">(Aprenda mais sobre distinctUntilChanged)</a>
</p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="distinctUntilChangedCode"></code>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>Que desastre!</p>
<p>Tú solo quieres una manzana y una banana. Sin embargo, la entrega también incluye fruta vieja y sucia. Ahora usa todos los operadores previamente aprendidos <code class="help" [appTooltip]="filterCodeTooltip">filter</code>, <code class="help" [appTooltip]="mapCodeTooltip">map</code> y <code class="help" [appTooltip]="takeCodeTooltip">take</code> uno tras otro en la función pipe.</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Que desastre!</p>
<p>Você só queria uma maçã e uma banana. Entretanto, a entrega também incluiu frutas podres e sujas. Agora use todos os operadores aprendidos previamente, <code class="help" [appTooltip]="filterCodeTooltip">filter</code>, <code class="help" [appTooltip]="mapCodeTooltip">map</code> e <code class="help" [appTooltip]="takeCodeTooltip">take</code>, um após o outro na função pipe.</p>
</div>
<div #filterCodeTooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="filterCode"></code>
Expand Down
5 changes: 5 additions & 0 deletions src/app/exercises/filter/filter.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{task}}</h3>
<p>Usa el operador <code class="help" [appTooltip]="tooltip">filter</code> para colocar únicamente fruta fresca en la cinta transportadora.
<a href="https://rxjs.dev/api/operators/filter" target="_blank">(Aprende más sobre filter)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Eca! Nos entregaram frutas podres.</p>
<p>Use o operador <code class="help" [appTooltip]="tooltip">filter</code> para colocar somente frutas frescas na esteira.
<a href="https://rxjs.dev/api/operators/filter" target="_blank">(Aprenda mais sobre filter)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="filterCode"></code>
Expand Down
5 changes: 5 additions & 0 deletions src/app/exercises/map/map.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{task}}</h3>
<p>El operador <code class="help" [appTooltip]="tooltip">map</code> permite cambiar los datos aquí. Lave las frutas removiendoles la suciedad a las frutas sucias.
<a href="https://rxjs.dev/api/operators/map" target="_blank">(Aprende más sobre map)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Algumas frutas foram entregues sujas.</p>
<p>O operador <code class="help" [appTooltip]="tooltip">map</code> permite modificar os dados. Lave as frutas removendo a sujeira delas.
<a href="https://rxjs.dev/api/operators/map" target="_blank">(Aprenda mais sobre map)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="mapCode"></code>
Expand Down
5 changes: 5 additions & 0 deletions src/app/exercises/merge/merge.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>Nuestro proveedor de fruta tuvo que entregarnos la fruta por separado. La función <code class="help" [appTooltip]="tooltip">merge</code> puede combinar diferentes observables en un observables. Entonces podemos usar la función pipe para poner únicamente fruta fresca en la cinta transportadora.
<a href="https://rxjs.dev/api/index/function/merge" target="_blank">(Aprende más sobre merge)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Agora precisamos combinar duas entregas.</p>
<p>Nosso fornecedor de frutas teve que fazer entregas separadas. A função <code class="help" [appTooltip]="tooltip">merge</code> pode combinar dois observables em um observable. Depois, podemos usar a função pipe para botar somente frutas frescas na esteira.
<a href="https://rxjs.dev/api/index/function/merge" target="_blank">(Aprenda mais sobre merge)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="mergeCode"></code>
Expand Down
6 changes: 6 additions & 0 deletions src/app/exercises/repeat/repeat.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<a href="https://rxjs.dev/api/operators/repeat" target="_blank">(Aprende más sobre repeat)</a>
</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Muito pouco!</p>
<p>Só recebemos uma maçã na entrega. Nesta emergência, o operador <code class="help" [appTooltip]="tooltip">repeat</code> nos ajudará. Ele repetirá o observable com o número especificado.
<a href="https://rxjs.dev/api/operators/repeat" target="_blank">(Aprende mais sobre repeat)</a>
</p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="repeatCode"></code>
Expand Down
6 changes: 6 additions & 0 deletions src/app/exercises/skip-last/skip-last.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<a href="https://rxjs.dev/api/operators/skipLast" target="_blank">(Aprende más sobre skipLast)</a>
</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Podemos fazer isso sem as duas últimas frutas.</p>
<p>O operador <code class="help" [appTooltip]="tooltip">skipLast</code> nos permite ignorar as últimas frutas.
<a href="https://rxjs.dev/api/operators/skipLast" target="_blank">(Aprenda mais sobre skipLast)</a>
</p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="skipLastCode"></code>
Expand Down
4 changes: 4 additions & 0 deletions src/app/exercises/skip-take-map/skip-take-map.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>Una entrega excesiva!</p>
<p>Tú solo quieres una banana. Sin embargo, la entrega contiene demasiada fruta innecesaria. Ahora use todos los operadores que haya aprendido hasta ahora: <code class="help" [appTooltip]="skipTooltip">skip</code>, <code class="help" [appTooltip]="takeTooltip">take</code> y <code class="help" [appTooltip]="mapTooltip">map</code> uno tras otro en una función pipe.</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Uma entrega excessiva!</p>
<p>Você quer somente uma banana. Entretanto, a entrega contém muitas frutas. Agora use todos os operadores que você aprendeu até agora: <code class="help" [appTooltip]="skipTooltip">skip</code>, <code class="help" [appTooltip]="takeTooltip">take</code> e <code class="help" [appTooltip]="mapTooltip">map</code>, um após o outro na função pipe.</p>
</div>
<div #skipTooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="skipCode"></code>
Expand Down
4 changes: 4 additions & 0 deletions src/app/exercises/skip/skip.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,10 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>Podemos hacerlo sin las primeras dos frutas. El operador <code class="help" [appTooltip]="tooltip">skip</code> nos permite omitir fruta innecesaria.
<a href="https://rxjs.dev/api/operators/skip" target="_blank">(Aprende más sobre skip)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Podemos fazer isso sem as duas primeiras frutas. O operador <code class="help" [appTooltip]="tooltip">skip</code> nos permite pular as frutas que não vamos usar.
<a href="https://rxjs.dev/api/operators/skip" target="_blank">(Aprenda mais sobre skip)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="skipCode"></code>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>No le des oportunidad al caos!</p>
<p>Recibiste dos entregas. Toma solo fruta utilizable con los operadores <code class="help" [appTooltip]="skipLastTooltip">skipLast</code> y <code class="help" [appTooltip]="skipTooltip">skip</code>. Luego reemplaza el observable EMPTY con la función <code class="help" [appTooltip]="mergeTooltip">merge</code>. Hacia el final, limpia las frutas sucias y colócalas en la cinta transportadora.</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Não dê oportunidade ao caos!</p>
<p>Você recebeu duas entregas. Pegue somentes as frutas utilizáveis com os operadores <code class="help" [appTooltip]="skipLastTooltip">skipLast</code> e <code class="help" [appTooltip]="skipTooltip">skip</code>. Depois, substitua o Obseravable EMPTY pela função <code class="help" [appTooltip]="mergeTooltip">merge</code>. Por fim, limpe as frutas sujas e coloque-as na esteira.</p>
</div>
<div #skipTooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="skipCode"></code>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>La función from crea un observable a partir de un arreglo. Esto entrega los datos uno tras otro, como un bucle foreach.</p>
<p>La función <code class="help" [appTooltip]="tooltip">subscribe</code> espera una función callback como parámetro. Esta recibe los datos desde el observable vía parámetros.</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Agora é hora de colocar algumas frutas na esteira!</p>
<p>A função <code>from</code> cria um Observable a partir de um array. Isso entrega os dados um após o outro, como em um loop foreach.</p>
<p>A função <code class="help" [appTooltip]="tooltip">subscribe</code> espera uma função de callback como parâmetro. Essa função recebe os dados do Observable por meio dos parâmetros.</p>
</div>

<div #tooltip class="tooltip codeTooltip">
<pre>
Expand Down
9 changes: 9 additions & 0 deletions src/app/exercises/subscribe/subscribe.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,15 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
Es una contraparte de una arreglo o matríz. En lugar de esos datos de retención, transmite los datos a los suscriptores interesados.
<a href="https://rxjs.dev/guide/subscription" target="_blank">(Más información sobre Subscription)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Bem-vindo ao RxJS-fruits, onde você escreve código JavaScript / TypeScript para misturar seu suco de frutas!</p>
<p>A base das <b>Extensões Reativas</b> é o <code class="help" [appTooltip]="tooltipObservableCode">Observable</code>.
Ele é equivalente a um array, mas em vez de reter os dados, ele transmite para os subscribers interessados.
<a href="https://rxjs.dev/guide/observable" target="_blank">(Mais informações sobre o Observable)</a></p>

<p>Um Observable, portanto, só é ativo se for assinado com a função <code class="help" [appTooltip]="tooltipSubscribeCode">subscribe</code>.
<a href="https://rxjs.dev/guide/subscription" target="_blank">(Mais informações sobre Subscription)</a></p>
</div>
<div #tooltipObservableCode class="tooltip codeTooltip">
<pre>
<code [highlight]="observableCode"></code>
Expand Down
5 changes: 5 additions & 0 deletions src/app/exercises/take-last/take-last.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<p>Usa el operador <code class="help" [appTooltip]="tooltip">takeLast</code> para colocar únicamente cierta cantidad de las últimas frutas en la cinta transportadora.
<a href="https://rxjs.dev/api/operators/takeLast" target="_blank"> (Aprende más sobre takeLast)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Somente a última, por favor!</p>
<p>Use o operador <code class="help" [appTooltip]="tooltip">takeLast</code> para colocar uma quantidade específica das frutas do final na esteira.
<a href="https://rxjs.dev/api/operators/takeLast" target="_blank"> (Aprende más sobre takeLast)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="takeLastCode"></code>
Expand Down
5 changes: 5 additions & 0 deletions src/app/exercises/take/take.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{task}}</h3>
<p>Usa el operador <code class="help" [appTooltip]="tooltip">take</code> para colocar en la cinta transportadora únicamente la cantidad de bananas especificadas en la receta.
<a href="https://rxjs.dev/api/operators/take" target="_blank">(Aprende más sobre take)</a></p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Tem muita fruta!</p>
<p>Use o operador <code class="help" [appTooltip]="tooltip">take</code> para colocar na esteira apenas a quantidade de bananas especificadas na receita.
<a href="https://rxjs.dev/api/operators/take" target="_blank">(Aprenda mais sobre take)</a></p>
</div>
<div #tooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="takeCode"></code>
Expand Down
9 changes: 9 additions & 0 deletions src/app/exercises/zip-concatmap/zip-concatmap.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ <h3>{{'EXERCISES.EXERCISETITLE' | translate }}: {{exerciseTitle}}</h3>
<a href="https://rxjs.dev/api/operators/concatMap" target="_blank">(Aprenda más sobre concatMap)</a>
</p>
</div>
<div *ngIf="currentLanguage === 'pt'">
<p>Variadade é a chave da felicidade!</p>
<p>Recebemos duas entregas e temos que colocados na esteira de forma alternada. A função <code class="help" [appTooltip]="zipTooltip">zip</code> conecta dois observablese passa a informação alternadamente para a função pipe. Entretanto, não passa cada fruta individualmente, mas sim como um array multi-dimensional.
<a href="https://rxjs.dev/api/index/function/zip" target="_blank">(Aprenda mais sobre zip)</a>
</p>
<p>O operador <code class="help" [appTooltip]="concatMapTooltip">concatMap</code> projeta o array multi-dimensional em um observable e retorna a fruta individualmente.
<a href="https://rxjs.dev/api/operators/concatMap" target="_blank">(Aprenda mais sobre concatMap)</a>
</p>
</div>
<div #zipTooltip class="tooltip codeTooltip">
<pre>
<code [highlight]="zipCode"></code>
Expand Down
6 changes: 6 additions & 0 deletions src/app/game-over-dialog/game-over-dialog.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,12 @@ <h1 mat-dialog-title>{{'APP.GAMEOVERDIALOG.TITLE' | translate}}</h1>
</a>
</p>

<p *ngIf="currentLanguage === 'pt'">
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GK7WN5T3SAYS4&source=url" target="_blank">
<img src="https://www.paypalobjects.com/pt_BR/BR/i/btn/btn_donateCC_LG.gif" alt="Spenden mit dem PayPal-Button">
</a>
</p>

<p *ngIf="currentLanguage === 'zh_CN'">
<a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=GK7WN5T3SAYS4&source=url" target="_blank">
<img src="https://www.paypalobjects.com/zh_CN/CN/i/btn/btn_donateCC_LG.gif" alt="Spenden mit dem PayPal-Button">
Expand Down
4 changes: 2 additions & 2 deletions src/app/game/game.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ export class GameComponent implements OnInit {
this.soundService.volume = soundSettings.volume;
this.soundService.isMute = soundSettings.isMute;

this.translate.addLangs(['en', 'de', 'ru', 'zh_CN', 'es']);
this.translate.addLangs(['en', 'de', 'ru', 'zh_CN', 'es', 'pt']);
this.translate.setDefaultLang('en');
this.translate.onLangChange.subscribe(() => {
this.localStorageService.saveLanguage(this.translate.currentLang);
Expand All @@ -138,7 +138,7 @@ export class GameComponent implements OnInit {
this.translate.use(language);
} else {
const browserLang = this.translate.getBrowserLang();
this.translate.use(browserLang.match(/en|de|ru|zh_CN|es/) ? browserLang : 'en');
this.translate.use(browserLang.match(/en|de|ru|zh_CN|es|pt/) ? browserLang : 'en');
}

this.exerciseService.exerciseChanged$.pipe(delay(0)).subscribe({
Expand Down
4 changes: 4 additions & 0 deletions src/app/game/shared/language.pipe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ export class LanguagePipe implements PipeTransform {
return '中文-简体';
}

if (value === 'pt') {
return 'Português';
}

return '';
}

Expand Down
Loading