Skip to content

Commit 67fbf4e

Browse files
committed
Added the ability to toggle between languages in tutorials.
1 parent be466b9 commit 67fbf4e

37 files changed

+92
-35
lines changed

_includes/tutorial-toc.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<p class="contents">Contents</p>
44
<ul>
55
{% for p in site.pages %}
6-
{% if p.tutorial == page.tutorial %}
6+
{% if p.tutorial == page.tutorial and p.language == page.language %}
77
<li><a href="{{ p.url }}">{{p.title}}</a></li>
88
{% endif %}
99
{% endfor %}

_layouts/tutorial.html

+24-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,30 @@
77

88
<div class="container">
99
<div class="row">
10-
11-
{% if page.title %}<h1>{{ page.title }}</h1>{% else %}<h1>{{ site.title }}</h1>{% endif %}
10+
11+
<div class="span10">{% if page.title %}<h1>{{ page.title }}</h1>{% else %}<h1>{{ site.title }}</h1>{% endif %}</div>
12+
13+
{% for pg in site.pages %}
14+
{% if pg.tutorial == "scala-tour" and pg.languages %}
15+
{% assign lang = pg.languages %}
16+
{% endif %}
17+
{% endfor %}
18+
19+
{% if page.language %}
20+
{% capture intermediate %}{{ page.url | remove_first: page.language }}{% endcapture %}
21+
{% capture rootTutorialURL %}{{ intermediate | remove_first: '/' }}{% endcapture %}
22+
{% else %}
23+
{% assign rootTutorialURL = page.url %}
24+
{% endif %}
25+
26+
<div class="span6">
27+
{% if lang %}
28+
<a href="{{ site.baseurl }}{{ rootTutorialURL }}"><img src="{{ site.baseurl }}/resources/images/language/en.png" title="Language: en"/></a>
29+
{% for l in lang %}
30+
<a href="{{ site.baseurl }}/{{ l }}{{ rootTutorialURL }}"><img src="{{ site.baseurl }}/resources/images/language/{{ l }}.png" title="Language: {{ l }}"/></a>
31+
{% endfor %}
32+
{% endif %}
33+
</div>
1234

1335
<div class="span10">
1436
{{ content }}

es/tutorials/tour/abstract-types.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@ title: Tipos Abstractos
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 2
99
outof: 33
10+
language: es
1011
---
1112

1213
En Scala, las cases son parametrizadas con valores (los parámetros de construcción) y con tipos (si las clases son [genéricas](generic-classes.html)). Por razones de consistencia, no es posible tener solo valores como miembros de objetos; tanto los tipos como los valores son miembros de objetos. Además, ambos tipos de miembros pueden ser concretos y abstractos.

es/tutorials/tour/annotations.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Anotaciones
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 3
9+
language: es
910
---
1011

1112
Las anotaciones sirven para asociar meta-información con definiciones.

es/tutorials/tour/anonymous-function-syntax.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Sintaxis de funciones anónimas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 14
9+
language: es
910
---
1011

1112
Scala provee una sintaxis relativamente livana para definir funciones anónimas. La siguiente expresión crea una función incrementadora para números enteros:

es/tutorials/tour/automatic-closures.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Construcción de closures automáticas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 16
9+
language: es
910
---
1011

1112
Scala permite pasar a un método como parámetro funciones que no reciban parámetros. Cuando un método así es invocado, los parámetros reales de la función enviada sin parámetros no son evaluados y una función "nularia" (de aridad creo, 0-aria, o sin parámetros) es pasada en su llugar la cual encapsula el comportamiento del parámetro correspondiente (comunmente conocido como "llamada por nombre").

es/tutorials/tour/case-classes.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Clases Case
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 5
9+
language: es
910
---
1011

1112
Scala da soporte a la noción de _clases caso_ (en inglés _case classes_, desde ahora _clases Case_). Las clases Case son clases regulares las cuales exportan sus parámetros constructores y a su vez proveen una descomposición recursiva de sí mismas a través de [reconocimiento de patrones](pattern-matching.html).

es/tutorials/tour/classes.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Clases
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 4
9+
language: es
910
---
1011
En Scala, las clases son plantillas estáticas que pueden ser instanciadas por muchos objetos en tiempo de ejecución.
1112
Aquí se presenta una clase la cual define la clase `Point`:

es/tutorials/tour/compound-types.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Tipos Compuestos
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 6
9+
language: es
910
---
1011

1112
Algunas veces es necesario expresar que el tipo de un objeto es un subtipo de varios otros tipos. En Scala esto puede ser expresado con la ayuda de *tipos compuestos*, los cuales pueden entenderse como la intersección de otros tipos.

es/tutorials/tour/currying.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Currying
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 15
9+
language: es
910
---
1011

1112
_Nota de traducción: Currying es una técnica de programación funcional nombrada en honor al matemático y lógico. Es por eso que no se intentará hacer ninguna traducción sobre el término Currying. Entiendase este como una acción, técnica base de PF. Como una nota al paso ,el lenguaje de programación Haskell debe su nombre a este eximio matemático._

es/tutorials/tour/explicitly-typed-self-references.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Autorefrencias explicitamente tipadas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 27
9+
language: es
910
---
1011

1112
Cuando se está construyendo software extensible, algunas veces resulta útil declarar el tipo de la variable `this` explicitamente. Para motivar esto, realizaremos una pequeña representación de una estructura de datos Grafo, en Scala.

es/tutorials/tour/extractor-objects.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Objetos Extractores
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 8
9+
language: es
910
---
1011

1112
En Scala pueden ser definidos patrones independientemente de las clases Caso. Para este fin exite un método llamado `unapply` que proveera el ya dicho extractor. Por ejemplo, en el código siguiente se define el objeto extractor `Twice`

es/tutorials/tour/generic-classes.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Clases genéricas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 9
9+
language: es
910
---
1011

1112
Tal como en Java 5 ([JDK 1.5](http://java.sun.com/j2se/1.5/)), Scala provee soporte nativo para parametrizar clases con tipos. Eso es llamado clases genéricas y son especialmente importantes para el desarrollo de clases tipo colección.

es/tutorials/tour/higher-order-functions.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Funciones de orden superior
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 18
9+
language: es
910
---
1011

1112
Scala permite la definición de funciones de orden superior. Estas funciones son las que _toman otras funciones como parámetros_, o las cuales _el resultado es una función_. Aquí mostramos una función `apply` la cual toma otra función `f` y un valor `v` como parámetros y aplica la función `f` a `v`:

es/tutorials/tour/implicit-parameters.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Parámetros implícitos
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 10
9+
language: es
910
---
1011

1112
Un método con _parámetros implícitos_ puede ser aplicado a argumentos tal como un método normal. En este caso la etiqueta `implicit` no tiene efecto. De todas maneras, si a un método le faltan argumentos para sus parámetros implícitos, tales argumentos serán automáticamente provistos.

es/tutorials/tour/inner-classes.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Clases Internas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 11
9+
language: es
910
---
1011

1112
En Scala es posible que las clases tengan como miembro otras clases. A diferencia de lenguajes tipo Java donde ese tipo de clases internas son miembros de las clases que las envuelven, en Scala esas clases internas están ligadas al objeto externo. Para ilustrar esta diferencia, vamos a mostrar rápidamente una implementación del tipo grafo:

es/tutorials/tour/local-type-inference.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Inferencia de tipos Local
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 29
9+
language: es
910
---
1011

1112
Scala tiene incorporado un mecanismo de inferencia de tipos el cual permite al programador omitir ciertos tipos de anotaciones. Por ejemplo, generalmente no es necesario especificar el tipo de una variable, ya que el compilador puede deducir el tipo mediante la expresión de inicialización de la variable. También puede generalmente omitirse los tipos de retorno de métodos ya que se corresponden con el tipo del cuerpo, que es inferido por el compilador.

es/tutorials/tour/lower-type-bounds.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Límite de tipado inferior
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 26
9+
language: es
910
---
1011

1112
Mientras que los [límites de tipado superior](upper-type-bounds.html) limitan el tipo de un subtipo de otro tipo, los *límites de tipado inferior* declaran que un tipo sea un supertipo de otro tipo. El término `T >: A` expresa que el parámetro de tipo `T` o el tipo abstracto `T` se refiera a un supertipo del tipo `A`

es/tutorials/tour/mixin-class-composition.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Composición de clases mixin
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 12
9+
language: es
910
---
1011
_Nota de traducción: La palabra `mixin` puede ser traducida como mezcla, dando título a esta sección de: Composición de clases Mezcla, pero es preferible utilizar la notación original_
1112

es/tutorials/tour/nested-functions.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Funciones Anidadas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 13
9+
language: es
910
---
1011

1112
En scala es posible anidar definiciones de funciones. El siguiente objeto provee una función `filter` para extraer valores de una lista de enteros que están por debajo de un determinado valor:

es/tutorials/tour/operators.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Operadores
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 17
9+
language: es
910
---
1011

1112
En Scala, cualquier método el cual reciba un solo parámetro puede ser usado como un *operador de infijo (infix)*. Aquí se muestra la definición de la clase `MyBool`, la cual define tres métodos `and`, `or`, y `negate`.

es/tutorials/tour/pattern-matching.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Reconocimiento de patrones
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 20
9+
language: es
910
---
1011

1112
_Nota de traducción: Es dificil encontrar en nuestro idioma una palabra que se relacione directamente con el significado de `match` en inglés. Podemos entender a `match` como "coincidir" o "concordar" con algo. En algunos lugares se utiliza la palabra `machear`, aunque esta no existe en nuestro idioma con el sentido que se le da en este texto, sino que se utiliza como traducción de `match`._

es/tutorials/tour/polymorphic-methods.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Métodos polimórficos
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 21
9+
language: es
910
---
1011

1112
Los métodos en Scala pueden ser parametrizados tanto con valores como con tipos. Como a nivel de clase, parámetros de valores son encerrados en un par de paréntesis, mientras que los parámetros de tipo son declarados dentro de un par de corchetes.

es/tutorials/tour/regular-expression-patterns.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Patrones basados en expresiones regulares
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 22
9+
language: es
910
---
1011

1112
## Patrones de secuencias que ignoran a la derecha ##

es/tutorials/tour/sequence-comprehensions.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Sequencias por Comprensión
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 7
9+
language: es
910
---
1011

1112
Scala cuenta con una notación ligera para expresar *sequencias por comprensión* (*sequence comprehensions*). Las comprensiones tienen la forma `for (enumeradores) yield e`, donde `enumeradores` se refiere a una lista de enumeradores separados por el símbolo punto y coma (;). Un *enumerador* puede ser tanto un generador el cual introduce nuevas variables, o un filtro. La comprensión evalúa el cuerpo `e` por cada paso (o ciclo) generado por los enumeradores y retorna una secuencia de estos valores.

es/tutorials/tour/tour-of-scala.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Introduction
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 1
9+
language: es
910
---
1011

1112
Scala es un moderno lenguaje de programación multi-paradigma diseñado para expresar patrones de programación comunes de una forma concisa, elegante, y de tipado seguro. Integra facilmente características de lenguajes orientados a objetos y funcionales.

es/tutorials/tour/traits.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Traits
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 24
9+
language: es
910
---
1011

1112
_Nota de traducción: La palabra `trait` en inglés puede traducirse literalmente como `rasgo` o `caracteristica`. Preferimos la designación oringial trait por ser una característica muy natural de Scala._

es/tutorials/tour/unified-types.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Tipos Unificados
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 30
9+
language: es
910
---
1011

1112
A diferencia de Java, todos los valores en Scala son objetos (incluyendo valores numéricos y funciones). Dado que Scala está basado en clases, todos los valores son instancias de una clase. El diagrama siguiente ilustra esta jerarquía de clases:

es/tutorials/tour/upper-type-bounds.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Límite de tipado superior
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 25
9+
language: es
910
---
1011

1112
En Scala, los [parámetros de tipo](generic-classes.html) y los [tipos abstractos](abstract-types.html) pueden ser restringidos por un límite de tipado. Tales límites de tipado limitan los valores concretos de las variables de tipo y posiblemente revelan más información acerca de los miembros de tales tipos. Un _límite de tipado superior_ `T <: A` declara que la variable de tipo `T` es un subtipo del tipo `A`.

es/tutorials/tour/variances.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Varianzas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 31
9+
language: es
910
---
1011

1112
Scala soporta anotaciones de varianza para parámetros de tipo para [clases genéricas.](generic-classes.html). A diferencia de Java 5 (es decir: [JDK 1.5](http://java.sun.com/j2se/1.5/)), las anotaciones de varianza pueden ser agregadas cuando una abstracción de clase es definidia, mientras que en Java 5, las anotaciones de varianza son dadas por los clientes cuando una albstracción de clase es usada.

es/tutorials/tour/views.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Vistas
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 32
9+
language: es
910
---
1011

1112
[Parámetros implícitos](implicit-parameters.html) y métodos también pueden definir conversiones implícitas llamadas _vistas_. Una vista de tipo `S` a `T` es definida por un valor implícito que tiene una función del tipo `S => T`, o por un método convertible a un valor de tal tipo.

es/tutorials/tour/xml-processing.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ title: Procesamiento de documentos XML
44

55
disqus: true
66

7-
tutorial: scala-tour-es
7+
tutorial: scala-tour
88
num: 33
9+
language: es
910
---
1011

1112
Scala can be used to easily create, parse, and process XML documents. XML data can be represented in Scala either by using a generic data representation, or with a data-specific data representation. The latter approach is supported by the *data-binding* tool `schema2src`.

resources/images/language/en.png

1.15 KB
Loading

resources/images/language/es.png

666 Bytes
Loading

resources/images/language/fr.png

536 Bytes
Loading

tutorials/index.md

+6-2
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ title: Tutorials
4545
</div>
4646
{% for pg in site.pages %}
4747
{% if pg.tutorial == "scala-tour" and pg.outof %}
48-
{% assign totalPagesTour = pg.outof %}
48+
{% unless pg.language %}
49+
{% assign totalPagesTour = pg.outof %}
50+
{% endunless %}
4951
{% endif %}
5052
{% endfor %}
5153

@@ -54,7 +56,9 @@ title: Tutorials
5456
{% for i in (1..totalPagesTour) %}
5557
{% for pg in site.pages %}
5658
{% if pg.tutorial == "scala-tour" and pg.num and pg.num == i %}
57-
<li class="tour-of-scala"><a href="{{ pg.url }}">{{ pg.title }}</a></li>
59+
{% unless pg.language %}
60+
<li class="tour-of-scala"><a href="{{ pg.url }}">{{ pg.title }}</a></li>
61+
{% endunless %}
5862
{% endif %}
5963
{% endfor %}
6064
{% endfor %}

0 commit comments

Comments
 (0)