mirror of
				https://github.com/adityatelange/hugo-PaperMod.git
				synced 2025-11-04 02:12:49 +01:00 
			
		
		
		
	Added french posts translation for testing internationalization (i18n) (#11)
This commit is contained in:
		
				
					committed by
					
						
						digitalcraftsman
					
				
			
			
				
	
			
			
			
						parent
						
							4e47e94a69
						
					
				
				
					commit
					93a7b4c297
				
			
							
								
								
									
										1190
									
								
								content/post/creating-a-new-theme.fr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1190
									
								
								content/post/creating-a-new-theme.fr.md
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										352
									
								
								content/post/goisforlovers.fr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										352
									
								
								content/post/goisforlovers.fr.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,352 @@
 | 
			
		||||
+++
 | 
			
		||||
author = "Auteur inconnu"
 | 
			
		||||
categories = ["Go"]
 | 
			
		||||
date = "2014-04-02"
 | 
			
		||||
description = ""
 | 
			
		||||
featured = "pic02.jpg"
 | 
			
		||||
featuredalt = ""
 | 
			
		||||
featuredpath = "date"
 | 
			
		||||
linktitle = ""
 | 
			
		||||
slug = "Introduction aux modeles Hugo"
 | 
			
		||||
title = "Introduction aux modèles (Hu)go"
 | 
			
		||||
type = "post"
 | 
			
		||||
 | 
			
		||||
+++
 | 
			
		||||
 | 
			
		||||
Hugo utilise l'excellente librairie [go][] [html/template][gohtmltemplate] pour
 | 
			
		||||
son moteur de modèles. c'est un moteur extrêmement léger qui offre un très petit
 | 
			
		||||
nombre de fonctions logiques. À notre expérience, c'est juste ce qu'il faut pour
 | 
			
		||||
créer un bon site web statique. Si vous avez déjà utilisé d'autre moteurs de
 | 
			
		||||
modèles pour différents langages ou frameworks, vous allez retrouver beaucoup de
 | 
			
		||||
similitudes avec les modèles go.
 | 
			
		||||
 | 
			
		||||
Ce document est une introduction sur l'utilisation de Go templates. La
 | 
			
		||||
[documentation go][gohtmltemplate] fourni plus de détails.
 | 
			
		||||
 | 
			
		||||
## Introduction aux modèles Go
 | 
			
		||||
 | 
			
		||||
Go templates fournit un langage de modèles très simple. Il adhère à la
 | 
			
		||||
conviction que les modèles ou les vues doivent avoir une logique des plus
 | 
			
		||||
élémentaires. L'une des conséquences de cette simplicité est que les modèles
 | 
			
		||||
seront plus rapides a être analysés.
 | 
			
		||||
 | 
			
		||||
Une caractéristique unique de Go templates est qu'il est conscient du contenu.
 | 
			
		||||
Les variables et le contenu va être nettoyé suivant le contexte d'utilisation.
 | 
			
		||||
Plus de détails sont disponibles dans la [documentation go][gohtmltemplate].
 | 
			
		||||
 | 
			
		||||
## Syntaxe basique
 | 
			
		||||
 | 
			
		||||
Les modèles en langage Go sont des fichiers HTML avec l'ajout de variables et
 | 
			
		||||
fonctions.
 | 
			
		||||
 | 
			
		||||
**Les variables Go et les fonctions sont accessibles avec {{ }}**
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Accès à une variable prédéfinie "foo":
 | 
			
		||||
 | 
			
		||||
    {{ foo }}
 | 
			
		||||
 | 
			
		||||
**Les paramètres sont séparés par des espaces**
 | 
			
		||||
 | 
			
		||||
Appel de la fonction add avec 1 et 2 en argument**
 | 
			
		||||
 | 
			
		||||
    {{ add 1 2 }}
 | 
			
		||||
 | 
			
		||||
**Les méthodes et les champs sont accessibles par un point**
 | 
			
		||||
 | 
			
		||||
Accès au paramètre de la page "bar"
 | 
			
		||||
 | 
			
		||||
    {{ .Params.bar }}
 | 
			
		||||
 | 
			
		||||
**Les parenthèses peuvent être utilisées pour grouper des éléments ensemble**
 | 
			
		||||
```
 | 
			
		||||
{{ if or (isset .Params "alt") (isset .Params "caption") }} Caption {{ end }}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Variables
 | 
			
		||||
 | 
			
		||||
Chaque modèle go a une structure (objet) mis à sa disposition. Avec Hugo, à
 | 
			
		||||
chaque modèle est passé soit une page, soit une structure de nœud, suivant quel
 | 
			
		||||
type de page vous rendez. Plus de détails sont disponibles sur la page des
 | 
			
		||||
[variables](/layout/variables).
 | 
			
		||||
 | 
			
		||||
Une variable est accessible par son nom.
 | 
			
		||||
 | 
			
		||||
    <title>{{ .Title }}</title>
 | 
			
		||||
 | 
			
		||||
Les variables peuvent également être définies et appelées.
 | 
			
		||||
 | 
			
		||||
    {{ $address := "123 Main St."}}
 | 
			
		||||
    {{ $address }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Functions
 | 
			
		||||
 | 
			
		||||
Go templace est livré avec quelques fonctions qui fournissent des
 | 
			
		||||
fonctionnalités basiques. Le système de Go template fourni également un
 | 
			
		||||
mécanisme permettant aux applications d'étendre les fonctions disponible. Les
 | 
			
		||||
[fonctions de modèle Hugo](/layout/functions) fourni quelques fonctionnalités
 | 
			
		||||
supplémentaires que nous espérons qu'elles seront utiles pour vos sites web.
 | 
			
		||||
Les functions sont appelées en utilisant leur nom suivi par les paramètres
 | 
			
		||||
requis séparés par des espaces. Des fonctions de modèles ne peuvent pas être
 | 
			
		||||
ajoutées sans recompiler Hugo.
 | 
			
		||||
 | 
			
		||||
**Exemple:**
 | 
			
		||||
 | 
			
		||||
    {{ add 1 2 }}
 | 
			
		||||
 | 
			
		||||
## Inclusions
 | 
			
		||||
 | 
			
		||||
Lorsque vous incluez un autre modèle, vous devez y passer les données qu'il sera
 | 
			
		||||
en mesure d'accèder. Pour passer le contexte actuel, pensez à ajouter un point.
 | 
			
		||||
La localisation du modèle sera toujours à partir du répertoire /layout/ dans
 | 
			
		||||
Hugo.
 | 
			
		||||
 | 
			
		||||
**Exemple:**
 | 
			
		||||
 | 
			
		||||
    {{ template "chrome/header.html" . }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Logique
 | 
			
		||||
 | 
			
		||||
Go templates fourni les itérations et la logique conditionnèle des plus basique.
 | 
			
		||||
 | 
			
		||||
### Itération
 | 
			
		||||
 | 
			
		||||
Comme en go, les modèles go utilisent fortement *range* pour itérer dans une
 | 
			
		||||
map, un array ou un slice. Les exemples suivant montre différentes façons
 | 
			
		||||
d'utiliser *range*
 | 
			
		||||
 | 
			
		||||
**Exemple 1: En utilisant le context**
 | 
			
		||||
 | 
			
		||||
    {{ range array }}
 | 
			
		||||
        {{ . }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
**Exemple 2: En déclarant un nom de variable**
 | 
			
		||||
 | 
			
		||||
    {{range $element := array}}
 | 
			
		||||
        {{ $element }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
**Exemple 2: En déclarant un nom de varialbe pour la clé et la valeur**
 | 
			
		||||
 | 
			
		||||
    {{range $index, $element := array}}
 | 
			
		||||
        {{ $index }}
 | 
			
		||||
        {{ $element }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
### Conditions
 | 
			
		||||
 | 
			
		||||
*If*, *else*, *with*, *or*, *&*, *and* fournissent la base pour la logique
 | 
			
		||||
conditionnelle avec Go templates. Comme *range*, chaque déclaration est fermé
 | 
			
		||||
avec `end`.
 | 
			
		||||
 | 
			
		||||
Go templates considère les valeurs suivante comme *false* :
 | 
			
		||||
 | 
			
		||||
* false
 | 
			
		||||
* 0
 | 
			
		||||
* tout array, slice, map ou chaine d'une longueur de zéro
 | 
			
		||||
 | 
			
		||||
**Exemple 1: If**
 | 
			
		||||
 | 
			
		||||
    {{ if isset .Params "title" }}<h4>{{ index .Params "title" }}</h4>{{ end }}
 | 
			
		||||
 | 
			
		||||
**Exemple 2: If -> Else**
 | 
			
		||||
 | 
			
		||||
    {{ if isset .Params "alt" }}
 | 
			
		||||
        {{ index .Params "alt" }}
 | 
			
		||||
    {{else}}
 | 
			
		||||
        {{ index .Params "caption" }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
**Exemple 3: And & Or**
 | 
			
		||||
```
 | 
			
		||||
{{ if and (or (isset .Params "title") (isset .Params "caption"))
 | 
			
		||||
    (isset .Params "attr")}}
 | 
			
		||||
```
 | 
			
		||||
**Exemple 4: With**
 | 
			
		||||
 | 
			
		||||
Une manière alternative d'écrire un "if" et de référencer cette même valeur est
 | 
			
		||||
d'utiliser "with". Cela permet de remplacer le contexte `.` par cet valeur et
 | 
			
		||||
saute le bloc si la variable est absente.
 | 
			
		||||
 | 
			
		||||
Le premier exemple peut être simplifié à ceci :
 | 
			
		||||
 | 
			
		||||
    {{ with .Params.title }}<h4>{{ . }}</h4>{{ end }}
 | 
			
		||||
 | 
			
		||||
**Exemple 5: If -> Else If**
 | 
			
		||||
 | 
			
		||||
    {{ if isset .Params "alt" }}
 | 
			
		||||
        {{ index .Params "alt" }}
 | 
			
		||||
    {{ else if isset .Params "caption" }}
 | 
			
		||||
        {{ index .Params "caption" }}
 | 
			
		||||
    {{ end }}
 | 
			
		||||
 | 
			
		||||
## *Pipes*
 | 
			
		||||
 | 
			
		||||
L'un des composants le plus puissant de Go templates est la capacité d'empiler
 | 
			
		||||
les action l'une après l'autre. Cela est fait en utilisant les *pipes*.
 | 
			
		||||
Empruntés aux *pipes* unix, le concept est simple. Chaque sortie de *pipeline*
 | 
			
		||||
devient l'entrée du *pipe* suivant.
 | 
			
		||||
 | 
			
		||||
À cause de la syntaxe très simple de Go templates, le *pipe* est essentiel pour
 | 
			
		||||
être capable d'enchainer les appels de fonctions. Une limitation des *pipes*
 | 
			
		||||
est qu'il ne peuvent fonctionner seulement avec une seule valeur et cette valeur
 | 
			
		||||
devient le dernier paramètre du prochain *pipeline*.
 | 
			
		||||
 | 
			
		||||
Quelques exemples simple devrait vous aider à comprendre comment utiliser les
 | 
			
		||||
*pipes*.
 | 
			
		||||
 | 
			
		||||
**Exemple 1 :**
 | 
			
		||||
 | 
			
		||||
    {{ if eq 1 1 }} Same {{ end }}
 | 
			
		||||
 | 
			
		||||
est identique à
 | 
			
		||||
 | 
			
		||||
    {{ eq 1 1 | if }} Same {{ end }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Il semble étrange de placer le *if* à la fin, mais il fournit une bonne
 | 
			
		||||
illustration de la façon d'utiliser les tuyaux.
 | 
			
		||||
 | 
			
		||||
**Exemple 2 :**
 | 
			
		||||
 | 
			
		||||
    {{ index .Params "disqus_url" | html }}
 | 
			
		||||
 | 
			
		||||
Accès au paramètre de page nommé "disqus_url" et échappement du HTML
 | 
			
		||||
 | 
			
		||||
**Exemple 3 :**
 | 
			
		||||
```
 | 
			
		||||
{{ if or (or (isset .Params "title") (isset .Params "caption"))
 | 
			
		||||
    (isset .Params "attr")}}
 | 
			
		||||
Stuff Here
 | 
			
		||||
{{ end }}
 | 
			
		||||
```
 | 
			
		||||
Peut être réécrit en
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{{  isset .Params "caption" | or isset .Params "title" |
 | 
			
		||||
    or isset .Params "attr" | if }}
 | 
			
		||||
Stuff Here
 | 
			
		||||
{{ end }}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Contexte (alias. le point)
 | 
			
		||||
 | 
			
		||||
Le concept le plus facilement négligé pour comprendre les modèles go est que
 | 
			
		||||
{{ . }} fait toujours référence au contexte actuel. Dans le plus haut niveau de
 | 
			
		||||
votre modèle, ce sera l'ensemble des données mis à votre disposition. Dans une
 | 
			
		||||
itération, ce sera la valeur de l'élément actuel. Enfin, dans une boucle, le
 | 
			
		||||
contexte change. . ne fera plus référence aux données disponibles dans la page
 | 
			
		||||
entière. Si vous avez besoin y d'accèder depuis l'intérieur d'une boucle, il est
 | 
			
		||||
judicieux d'y définir comme variable au lieu de dépendre du contexte.
 | 
			
		||||
 | 
			
		||||
**Exemple:**
 | 
			
		||||
```
 | 
			
		||||
{{ $title := .Site.Title }}
 | 
			
		||||
{{ range .Params.tags }}
 | 
			
		||||
<li> <a href="{{ $baseurl }}/tags/{{ . | urlize }}">
 | 
			
		||||
    {{ . }}</a> - {{ $title }} </li>
 | 
			
		||||
{{ end }}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Notez que, une fois que nous sommes entrés dans la boucle, la valeur de
 | 
			
		||||
{{ . }} a changée. Nous avons défini une variable en dehors de la boucle, afin
 | 
			
		||||
d'y avoir accès dans la boucle.
 | 
			
		||||
 | 
			
		||||
# Les Paramètres d'Hugo
 | 
			
		||||
 | 
			
		||||
Hugo fournit l'option de passer des valeurs au modèle depuis la configuration du
 | 
			
		||||
site, ou depuis les métadonnées de chaque partie du contenu. Vous pouvez définir
 | 
			
		||||
n'importe quelle valeur de n'importe quel type (supporté par votre section
 | 
			
		||||
liminaire / format de configuration) et les utiliser comme vous le souhaitez
 | 
			
		||||
dans votre modèle.
 | 
			
		||||
 | 
			
		||||
## Utiliser les paramètres de contenu (page)
 | 
			
		||||
 | 
			
		||||
Dans chaque partie du contenu, vous pouvez fournir des variables pour être
 | 
			
		||||
utilisées par le modèle. Cela se passe dans la
 | 
			
		||||
[section liminaire](/content/front-matter).
 | 
			
		||||
 | 
			
		||||
Un exemple de cela est utilisé par ce site de documentation. La plupart des
 | 
			
		||||
pages bénéficient de la présentation de la table des matières. Quelques fois,
 | 
			
		||||
la table des matières n'a pas beaucoup de sens. Nous avons défini une variable
 | 
			
		||||
dans notre section liminaire de quelques pages pour désactiver la table des
 | 
			
		||||
matières.
 | 
			
		||||
 | 
			
		||||
Ceci est un exemple de section liminaire :
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
---
 | 
			
		||||
title: "Permalinks"
 | 
			
		||||
date: "2013-11-18"
 | 
			
		||||
aliases:
 | 
			
		||||
  - "/doc/permalinks/"
 | 
			
		||||
groups: ["extras"]
 | 
			
		||||
groups_weight: 30
 | 
			
		||||
notoc: true
 | 
			
		||||
---
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Ceci est le code correspondant dans le modèle :
 | 
			
		||||
 | 
			
		||||
      {{ if not .Params.notoc }}
 | 
			
		||||
        <div id="toc" class="well col-md-4 col-sm-6">
 | 
			
		||||
        {{ .TableOfContents }}
 | 
			
		||||
        </div>
 | 
			
		||||
      {{ end }}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Utiliser les paramètres de site (config)
 | 
			
		||||
 | 
			
		||||
Dans votre configuration de plus haut niveau (ex `config.yaml`), vous pouvez
 | 
			
		||||
définir des paramètres de site, dont les valeurs vous seront accessibles.
 | 
			
		||||
 | 
			
		||||
Pour les instances, vous pourriez délarer :
 | 
			
		||||
 | 
			
		||||
```yaml
 | 
			
		||||
params:
 | 
			
		||||
  CopyrightHTML: "Copyright © 2013 John Doe. All Rights Reserved."
 | 
			
		||||
  TwitterUser: "spf13"
 | 
			
		||||
  SidebarRecentLimit: 5
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Avec un pied de page, vous devriez déclarer un `<footer>` qui est affiché
 | 
			
		||||
seulement si le paramètre `CopyrightHTML` est déclaré, et si il l'est, vous
 | 
			
		||||
devriez le déclarer comme HTML-safe, afin d'éviter d'échapper les entités HTML.
 | 
			
		||||
Cela vous permettra de le modifier facilement dans votre configuration au lieu
 | 
			
		||||
de le chercher dans votre modèle.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{{if .Site.Params.CopyrightHTML}}<footer>
 | 
			
		||||
<div class="text-center">{{.Site.Params.CopyrightHTML | safeHtml}}</div>
 | 
			
		||||
</footer>{{end}}
 | 
			
		||||
```
 | 
			
		||||
Une alternative au "if" et d'appeler la même valeur est d'utiliser "with". Cela
 | 
			
		||||
modifiera le contexte et passera le bloc si la variable est absente :
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{{with .Site.Params.TwitterUser}}<span class="twitter">
 | 
			
		||||
<a href="https://twitter.com/{{.}}" rel="author">
 | 
			
		||||
<img src="/images/twitter.png" width="48" height="48" title="Twitter: {{.}}"
 | 
			
		||||
 alt="Twitter"></a>
 | 
			
		||||
</span>{{end}}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Enfin, si vous souhaitez extraire des "constantes magiques" de vos mises en
 | 
			
		||||
page, vous pouvez le faire comme dans l'exemple suivant :
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
<nav class="recent">
 | 
			
		||||
  <h1>Recent Posts</h1>
 | 
			
		||||
  <ul>{{range first .Site.Params.SidebarRecentLimit .Site.Recent}}
 | 
			
		||||
    <li><a href="{{.RelPermalink}}">{{.Title}}</a></li>
 | 
			
		||||
  {{end}}</ul>
 | 
			
		||||
</nav>
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
[go]: <http://golang.org/>
 | 
			
		||||
[gohtmltemplate]: <http://golang.org/pkg/html/template/>
 | 
			
		||||
							
								
								
									
										99
									
								
								content/post/hugoisforlovers.fr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								content/post/hugoisforlovers.fr.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
			
		||||
+++
 | 
			
		||||
author = "Auteur Hugo"
 | 
			
		||||
categories = ["Hugo"]
 | 
			
		||||
date = "2014-04-02"
 | 
			
		||||
description = ""
 | 
			
		||||
featured = "pic03.jpg"
 | 
			
		||||
featuredalt = "Pic 3"
 | 
			
		||||
featuredpath = "date"
 | 
			
		||||
linktitle = ""
 | 
			
		||||
slug = "Debuter avec Hugo"
 | 
			
		||||
title = "Débuter avec Hugo"
 | 
			
		||||
type = "post"
 | 
			
		||||
 | 
			
		||||
+++
 | 
			
		||||
 | 
			
		||||
## Étape 1. Installer Hugo
 | 
			
		||||
 | 
			
		||||
Allez sur la page de téléchargements de
 | 
			
		||||
[hugo](https://github.com/spf13/hugo/releases) et téléchargez la version
 | 
			
		||||
appropriée à votre système d'exploitation et votre architecture.
 | 
			
		||||
 | 
			
		||||
Sauvegardez le fichier téléchargé à un endroit précis, afin de l'utiliser dans
 | 
			
		||||
l'étape suivante.
 | 
			
		||||
 | 
			
		||||
Des informations plus complètes sont disponibles sur la page
 | 
			
		||||
[installing hugo](/overview/installing/)
 | 
			
		||||
<!--more-->
 | 
			
		||||
 | 
			
		||||
## Étape 2. Compilez la documentation
 | 
			
		||||
 | 
			
		||||
Hugo possède son propre site d'exemple qui se trouve être également le site que
 | 
			
		||||
vous lisez actuellement.
 | 
			
		||||
 | 
			
		||||
Suivez les instructions suivante :
 | 
			
		||||
 | 
			
		||||
 1. Clonez le [dépôt de hugo](http://github.com/spf13/hugo)
 | 
			
		||||
 2. Allez dans ce dépôt
 | 
			
		||||
 3. Lancez Hugo en mode serveur et compilez la documentation
 | 
			
		||||
 4. Ouvrez votre navigateur sur http://localhost:1313
 | 
			
		||||
 | 
			
		||||
Voici les commandes génériques correspondantes :
 | 
			
		||||
 | 
			
		||||
    git clone https://github.com/spf13/hugo
 | 
			
		||||
    cd hugo
 | 
			
		||||
    /chemin/ou/vous/avez/installe/hugo server --source=./docs
 | 
			
		||||
    > 29 pages created
 | 
			
		||||
    > 0 tags index created
 | 
			
		||||
    > in 27 ms
 | 
			
		||||
    > Web Server is available at http://localhost:1313
 | 
			
		||||
    > Press ctrl+c to stop
 | 
			
		||||
 | 
			
		||||
Lorsque vous avez cela, continuez le reste de ce guide sur votre version locale.
 | 
			
		||||
 | 
			
		||||
## Étape 3. Changer le site de documentation
 | 
			
		||||
 | 
			
		||||
Arrêtez le processus de Hugo en pressant ctrl+c.
 | 
			
		||||
 | 
			
		||||
Maintenant, nous allons relancer hugo, mais cette fois avec Hugo en mode de
 | 
			
		||||
surveillance.
 | 
			
		||||
 | 
			
		||||
    /chemin/vers/hugo/de/l-etape/1/hugo server --source=./docs --watch
 | 
			
		||||
    > 29 pages created
 | 
			
		||||
    > 0 tags index created
 | 
			
		||||
    > in 27 ms
 | 
			
		||||
    > Web Server is available at http://localhost:1313
 | 
			
		||||
    > Watching for changes in /Users/spf13/Code/hugo/docs/content
 | 
			
		||||
    > Press ctrl+c to stop
 | 
			
		||||
 | 
			
		||||
Ouvrez votre [éditeur favori](https://vim.spf13.com) et changer l'une des
 | 
			
		||||
sources des pages de contenu.
 | 
			
		||||
Open your [favorite editor](http://vim.spf13.com) and change one of the source
 | 
			
		||||
content pages. Que diriez-vous de modifier ce fichier pour *résoudre une faute
 | 
			
		||||
de typo*.
 | 
			
		||||
 | 
			
		||||
Les fichiers de contenu peuvent être trouvés dans `docs/content/`. Sauf
 | 
			
		||||
indication contraire, les fichiers sont situés au même emplacement relatif que
 | 
			
		||||
l'URL, dans notre cas `docs/content/overview/quickstart.md`.
 | 
			
		||||
 | 
			
		||||
Modifiez et sauvegardez ce fichier. Notez ce qu'il se passe dans le terminal.
 | 
			
		||||
 | 
			
		||||
    > Change detected, rebuilding site
 | 
			
		||||
 | 
			
		||||
    > 29 pages created
 | 
			
		||||
    > 0 tags index created
 | 
			
		||||
    > in 26 ms
 | 
			
		||||
 | 
			
		||||
Rechargez la page dans votre navigateur et voyez que le problème de typo est
 | 
			
		||||
maintenant résolu.
 | 
			
		||||
 | 
			
		||||
Notez à quel point cela a été rapide. Essayez de recharger le site avant qu'il
 | 
			
		||||
soit fini de compiler.
 | 
			
		||||
Notice how quick that was. Try to refresh the site before it's finished
 | 
			
		||||
building. Je paris que vous n'y arrivez pas.
 | 
			
		||||
Le fait d'avoir des réactions presque instantanées vous permet d'avoir votre
 | 
			
		||||
créativité fluide sans avoir à attendre de longues compilations.
 | 
			
		||||
 | 
			
		||||
## Step 4. Amusez-vous
 | 
			
		||||
 | 
			
		||||
Le meilleur moyen d'apprendre quelque chose est de s'amuser avec.
 | 
			
		||||
							
								
								
									
										218
									
								
								content/post/migrate-from-jekyll.fr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								content/post/migrate-from-jekyll.fr.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,218 @@
 | 
			
		||||
+++
 | 
			
		||||
author = "Auteur de migration"
 | 
			
		||||
categories = ["Hugo", "Jekyll"]
 | 
			
		||||
date = "2014-03-10"
 | 
			
		||||
description = ""
 | 
			
		||||
featured = ""
 | 
			
		||||
featuredalt = ""
 | 
			
		||||
featuredpath = ""
 | 
			
		||||
linktitle = ""
 | 
			
		||||
slug = "Migrer vers Hugo depuis Jekyll"
 | 
			
		||||
title = "Migrer vers Hugo depuis Jekyll"
 | 
			
		||||
type = "post"
 | 
			
		||||
 | 
			
		||||
+++
 | 
			
		||||
 | 
			
		||||
## Déplacez le contenu statique vers `static`
 | 
			
		||||
Jekyll a une règle comme quoi tout répertoire qui ne commence pas par `_` sera
 | 
			
		||||
copié tel-quel dans le répertoire `_site`. Hugo garde tout le contenu statique
 | 
			
		||||
dans le répertoire `static`. Vous devez donc déplacer tout ce type de contenu
 | 
			
		||||
là-dedans. Avec Jekylll, l'arborescence ressemblant à ceci :
 | 
			
		||||
 | 
			
		||||
    ▾ <root>/
 | 
			
		||||
        ▾ images/
 | 
			
		||||
            logo.png
 | 
			
		||||
<!--more-->
 | 
			
		||||
doit devenir
 | 
			
		||||
 | 
			
		||||
    ▾ <root>/
 | 
			
		||||
        ▾ static/
 | 
			
		||||
            ▾ images/
 | 
			
		||||
                logo.png
 | 
			
		||||
 | 
			
		||||
En outre, vous allez devoir déplacer tous les fichiers présents à la racine vers
 | 
			
		||||
le répertoire `static`.
 | 
			
		||||
 | 
			
		||||
## Créez votre configuration Hugo
 | 
			
		||||
Hugo peut lire votre fichier de configuration au format JSON, YAML et TOML. Hugo
 | 
			
		||||
supporte également les paramètres de configuration. Plus d'informations sur la
 | 
			
		||||
[documentation de configuration Hugo](/overview/configuration/)
 | 
			
		||||
 | 
			
		||||
## Définiez votre répertoire de publication sur `_site`
 | 
			
		||||
La valeur par défaut pour Jekyll est d'utiliser le répertoire `_site` pour
 | 
			
		||||
publier le contenu. Pour Hugo, le répertoire de publication est `public`. Si,
 | 
			
		||||
comme moi, vous avez [lié `_site` vers un sous-module git sur la branche
 | 
			
		||||
`gh-pages`](http://blog.blindgaenger.net/generate_github_pages_in_a_submodule.ht
 | 
			
		||||
ml), vous allez vouloir avoir quelques alternatives :
 | 
			
		||||
 | 
			
		||||
1. Changez votre lien du sous-module `gh-pages` pour pointer sur public au lieu
 | 
			
		||||
de `_site` (recommendé).
 | 
			
		||||
 | 
			
		||||
        git submodule deinit _site
 | 
			
		||||
        git rm _site
 | 
			
		||||
        git submodule add -b gh-pages
 | 
			
		||||
            git@github.com:your-username/your-repo.git public
 | 
			
		||||
 | 
			
		||||
2. Ou modifiez la configuration de Hugo pour utiliser le répertoire `_site` au
 | 
			
		||||
lieu de `public`.
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            ..
 | 
			
		||||
            "publishdir": "_site",
 | 
			
		||||
            ..
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
## Convertir un thème Jekyll pour Hugo
 | 
			
		||||
C'est la majeure partie du travail. La documentation est votre ami.
 | 
			
		||||
Vous devriez vous référer à [la documentation des thèmes de Jekyll]
 | 
			
		||||
(http://jekyllrb.com/docs/templates/) si vous devez vous rafraîchir la mémoire
 | 
			
		||||
sur la façon dont vous avez construit votre blog et [les thèmes de Hugo]
 | 
			
		||||
(/layout/templates/) pour apprendre la manière de faire sur Hugo.
 | 
			
		||||
 | 
			
		||||
Pour vous donner un point de référence, la conversion du thème pour
 | 
			
		||||
[heyitsalex.net](http://heyitsalex.net/) ne m'a pris que quelques heures.
 | 
			
		||||
 | 
			
		||||
## Convertir les extensions Jekyll vers des shortcodes Hugo
 | 
			
		||||
Jekyll support les [extensions](http://jekyllrb.com/docs/plugins/); Hugo lui a
 | 
			
		||||
les [shortcodes](/doc/shortcodes/). C'est assez banal les porter.
 | 
			
		||||
 | 
			
		||||
### Implémentation
 | 
			
		||||
Comme exemple, j'utilise une extension pour avoir un [`image_tag`](https://githu
 | 
			
		||||
b.com/alexandre-normand/alexandre-normand/blob/74bb12036a71334fdb7dba84e073382fc
 | 
			
		||||
06908ec/_plugins/image_tag.rb) presonnalisé pour générer les images avec une
 | 
			
		||||
légende sur Jekyll. J'ai vu que Hugo implémente un shortcode qui fait exactement
 | 
			
		||||
la même chose.
 | 
			
		||||
 | 
			
		||||
Extension Jekyll :
 | 
			
		||||
```
 | 
			
		||||
module Jekyll
 | 
			
		||||
  class ImageTag < Liquid::Tag
 | 
			
		||||
    @url = nil
 | 
			
		||||
    @caption = nil
 | 
			
		||||
    @class = nil
 | 
			
		||||
    @link = nil
 | 
			
		||||
    // Patterns
 | 
			
		||||
    IMAGE_URL_WITH_CLASS_AND_CAPTION =
 | 
			
		||||
    IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK =
 | 
			
		||||
        /(\w+)(\s+)((https?:\/\/|\/)(\S+))(\s+)"(.*?)"(\s+)->
 | 
			
		||||
        ((https?:\/\/|\/)(\S+))(\s*)/i
 | 
			
		||||
    IMAGE_URL_WITH_CAPTION = /((https?:\/\/|\/)(\S+))(\s+)"(.*?)"/i
 | 
			
		||||
    IMAGE_URL_WITH_CLASS = /(\w+)(\s+)((https?:\/\/|\/)(\S+))/i
 | 
			
		||||
    IMAGE_URL = /((https?:\/\/|\/)(\S+))/i
 | 
			
		||||
    def initialize(tag_name, markup, tokens)
 | 
			
		||||
      super
 | 
			
		||||
      if markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION_AND_LINK
 | 
			
		||||
        @class   = $1
 | 
			
		||||
        @url     = $3
 | 
			
		||||
        @caption = $7
 | 
			
		||||
        @link = $9
 | 
			
		||||
      elsif markup =~ IMAGE_URL_WITH_CLASS_AND_CAPTION
 | 
			
		||||
        @class   = $1
 | 
			
		||||
        @url     = $3
 | 
			
		||||
        @caption = $7
 | 
			
		||||
      elsif markup =~ IMAGE_URL_WITH_CAPTION
 | 
			
		||||
        @url     = $1
 | 
			
		||||
        @caption = $5
 | 
			
		||||
      elsif markup =~ IMAGE_URL_WITH_CLASS
 | 
			
		||||
        @class = $1
 | 
			
		||||
        @url   = $3
 | 
			
		||||
      elsif markup =~ IMAGE_URL
 | 
			
		||||
        @url = $1
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    def render(context)
 | 
			
		||||
      if @class
 | 
			
		||||
        source = "<figure class='#{@class}'>"
 | 
			
		||||
      else
 | 
			
		||||
        source = "<figure>"
 | 
			
		||||
      end
 | 
			
		||||
      if @link
 | 
			
		||||
        source += "<a href=\"#{@link}\">"
 | 
			
		||||
      end
 | 
			
		||||
      source += "<img src=\"#{@url}\">"
 | 
			
		||||
      if @link
 | 
			
		||||
        source += "</a>"
 | 
			
		||||
      end
 | 
			
		||||
      source += "<figcaption>#{@caption}</figcaption>" if @caption
 | 
			
		||||
      source += "</figure>"
 | 
			
		||||
      source
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
Liquid::Template.register_tag('image', Jekyll::ImageTag)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Écrite en tant que shortcode Hugo:
 | 
			
		||||
```
 | 
			
		||||
<!-- image -->
 | 
			
		||||
<figure {{ with .Get "class" }}class="{{.}}"{{ end }}>
 | 
			
		||||
    {{ with .Get "link"}}<a href="{{.}}">{{ end }}
 | 
			
		||||
        <img src="{{ .Get "src" }}"
 | 
			
		||||
            {{ if or (.Get "alt") (.Get "caption") }}
 | 
			
		||||
                alt="{{ with .Get "alt"}}
 | 
			
		||||
                        {{.}}
 | 
			
		||||
                     {{else}}
 | 
			
		||||
                        {{ .Get "caption" }}
 | 
			
		||||
                     {{ end }}"
 | 
			
		||||
               {{ end }} />
 | 
			
		||||
    {{ if .Get "link"}}</a>{{ end }}
 | 
			
		||||
    {{ if or (or (.Get "title") (.Get "caption")) (.Get "attr")}}
 | 
			
		||||
    <figcaption>{{ if isset .Params "title" }}
 | 
			
		||||
        {{ .Get "title" }}{{ end }}
 | 
			
		||||
        {{ if or (.Get "caption") (.Get "attr")}}<p>
 | 
			
		||||
        {{ .Get "caption" }}
 | 
			
		||||
        {{ with .Get "attrlink"}}<a href="{{.}}"> {{ end }}
 | 
			
		||||
            {{ .Get "attr" }}
 | 
			
		||||
        {{ if .Get "attrlink"}}</a> {{ end }}
 | 
			
		||||
        </p> {{ end }}
 | 
			
		||||
    </figcaption>
 | 
			
		||||
    {{ end }}
 | 
			
		||||
</figure>
 | 
			
		||||
<!-- image -->
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Utilisation
 | 
			
		||||
J'ai simplement changé :
 | 
			
		||||
```
 | 
			
		||||
{% image
 | 
			
		||||
    full http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg
 | 
			
		||||
    "One of my favorite touristy-type photos. I secretly waited for the
 | 
			
		||||
    good light while we were "having fun" and took this. Only regret: a
 | 
			
		||||
    stupid pole in the top-left corner of the frame I had to clumsily get
 | 
			
		||||
    rid of at post-processing."
 | 
			
		||||
    ->http://www.flickr.com/photos/alexnormand/4829260124/in/
 | 
			
		||||
        set-72157624547713078/ %}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
pour cela (cet exemple utilise une version légèrement étendue nommée `fig`,
 | 
			
		||||
différente de la `figure` intégrée) :
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
{{%/* fig class="full"
 | 
			
		||||
    src="http://farm5.staticflickr.com/4136/4829260124_57712e570a_o_d.jpg"
 | 
			
		||||
    title="One of my favorite touristy-type photos. I secretly waited for the
 | 
			
		||||
    good light while we were having fun and took this. Only regret: a stupid
 | 
			
		||||
    pole in the top-left corner of the frame I had to clumsily get rid of at
 | 
			
		||||
    post-processing."
 | 
			
		||||
    link="http://www.flickr.com/photos/alexnormand/4829260124/in/
 | 
			
		||||
            set-72157624547713078/" */%}}
 | 
			
		||||
```
 | 
			
		||||
Comme bonus, les paramètres nommés des shortcodes sont plus lisibles.
 | 
			
		||||
 | 
			
		||||
## Touches finales
 | 
			
		||||
### Corriger le contenu
 | 
			
		||||
Suivant le nombre de modifications que vous avez effectué sur chaque articles
 | 
			
		||||
avec Jekyll, cette étape requierra plus ou moins d'efforts. Il n'y a pas de
 | 
			
		||||
règles rigoureuses ici, si ce n'est que `hugo server --watch` est votre ami.
 | 
			
		||||
Testez vos modifications et corrigez les erreurs au besoin.
 | 
			
		||||
 | 
			
		||||
### Nettoyez le tout
 | 
			
		||||
Vous voudrez sûrement supprimer votre configuration Jekyll maintenant que tout
 | 
			
		||||
est fini. Exact, pensez à supprimer tout ce qui est inutilisé.
 | 
			
		||||
 | 
			
		||||
## Un exemple pratique
 | 
			
		||||
[Hey, it's Alex](http://heyitsalex.net/) a été migré de Jekyll vers Hugo en
 | 
			
		||||
moins de temps qu'une journée père enfant. Vous pouvez trouver toutes les
 | 
			
		||||
modification en regardant ce [diff](https://github.com/alexandre-normand/alexand
 | 
			
		||||
re-normand/compare/869d69435bd2665c3fbf5b5c78d4c22759d7613a...b7f6605b1265e83b4b
 | 
			
		||||
81495423294208cc74d610).
 | 
			
		||||
		Reference in New Issue
	
	Block a user