Skip to content

Commit a28a901

Browse files
Update translations (#898)
1 parent 72065a4 commit a28a901

40 files changed

+3000
-1840
lines changed

docs/ca/docs/hello_nf-core/02_rewrite_hello.md

Lines changed: 105 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ Un cop es tanqui la TUI, hauríeu de veure la següent sortida a la consola.
7373
| \| | \__, \__/ | \ |___ \`-._,-`-,
7474
`._,._,'
7575

76-
nf-core/tools version 3.4.1 - https://nf-co.re
76+
nf-core/tools version 3.5.2 - https://nf-co.re
7777

7878

7979
INFO Launching interactive nf-core pipeline creation tool.
@@ -231,7 +231,7 @@ Si mireu dins del fitxer `main.nf`, veureu que importa un workflow anomenat `HEL
231231

232232
Això és equivalent al workflow `workflows/demo.nf` que vam trobar a la Part 1, i serveix com a workflow de marcador de posició per al nostre workflow d'interès, amb alguna funcionalitat nf-core ja en el seu lloc.
233233

234-
```groovy title="core-hello/workflows/hello.nf" linenums="1" hl_lines="15 17 19 35"
234+
```groovy title="core-hello/workflows/hello.nf" linenums="1" hl_lines="15 17 19 53"
235235
/*
236236
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
237237
IMPORT MODULES / SUBWORKFLOWS / FUNCTIONS
@@ -257,7 +257,25 @@ workflow HELLO {
257257
//
258258
// Collate and save software versions
259259
//
260-
softwareVersionsToYAML(ch_versions)
260+
def topic_versions = Channel.topic("versions")
261+
.distinct()
262+
.branch { entry ->
263+
versions_file: entry instanceof Path
264+
versions_tuple: true
265+
}
266+
267+
def topic_versions_string = topic_versions.versions_tuple
268+
.map { process, tool, version ->
269+
[ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
270+
}
271+
.groupTuple(by:0)
272+
.map { process, tool_versions ->
273+
tool_versions.unique().sort()
274+
"${process}:\n${tool_versions.join('\n')}"
275+
}
276+
277+
softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
278+
.mix(topic_versions_string)
261279
.collectFile(
262280
storeDir: "${params.outdir}/pipeline_info",
263281
name: 'hello_software_' + 'versions.yml',
@@ -287,6 +305,13 @@ En comparació amb un workflow bàsic de Nextflow com el desenvolupat a [Hello N
287305

288306
Aquestes són funcionalitats opcionals de Nextflow que fan que el workflow sigui **composable**, és a dir, que es pot cridar des de dins d'un altre workflow.
289307

308+
!!! note "El bloc `Channel.topic`"
309+
310+
Potser haureu notat el bloc `def topic_versions = Channel.topic("versions")` que comença a la línia 17.
311+
Aquest és codi de manteniment estàndard que recull informació de versions de programari de tots els mòduls automàticament.
312+
nf-core està desplegant aquest mecanisme a tots els pipelines el 2026, de manera que el veureu a tots els nous pipelines d'ara endavant.
313+
La Part 4 d'aquest curs explica com funciona en detall.
314+
290315
!!! note "Workflows composables en profunditat"
291316

292317
La [Workflows of Workflows](../side_quests/workflows_of_workflows.md) Side Quest explora la composició de workflows amb molt més detall, incloent com compondre múltiples workflows junts i gestionar fluxos de dades complexos entre ells. Introduïm la composabilitat aquí perquè és un requisit fonamental de l'arquitectura de plantilla nf-core, que utilitza workflows niats per organitzar la inicialització del pipeline, el workflow d'anàlisi principal i les tasques de finalització en components separats i reutilitzables.
@@ -374,21 +399,21 @@ include { cowpy } from './modules/cowpy.nf'
374399
375400
workflow {
376401
377-
// create a channel for inputs from a CSV file
402+
// crea un canal per a entrades des d'un fitxer CSV
378403
greeting_ch = channel.fromPath(params.greeting)
379404
.splitCsv()
380405
.map { line -> line[0] }
381406
382-
// emit a greeting
407+
// emet una salutacio
383408
sayHello(greeting_ch)
384409
385-
// convert the greeting to uppercase
410+
// converteix la salutacio a majuscules
386411
convertToUpper(sayHello.out)
387412
388-
// collect all the greetings into one file
413+
// recull totes les salutacions en un fitxer
389414
collectGreetings(convertToUpper.out.collect(), params.batch)
390415
391-
// generate ASCII art of the greetings with cowpy
416+
// genera art ASCII de les salutacions amb cowpy
392417
cowpy(collectGreetings.out.outfile, params.character)
393418
}
394419
```
@@ -431,7 +456,7 @@ Ara, substituïu la construcció del canal per una simple declaració `take` que
431456
=== "Abans"
432457

433458
```groovy title="original-hello/hello.nf" linenums="18"
434-
// create a channel for inputs from a CSV file
459+
// crea un canal per a entrades des d'un fitxer CSV
435460
greeting_ch = channel.fromPath(params.greeting)
436461
.splitCsv()
437462
.map { line -> line[0] }
@@ -495,16 +520,16 @@ A continuació, afegiu una declaració `main` abans de la resta d'operacions cri
495520
=== "Abans"
496521

497522
```groovy title="original-hello/hello.nf" linenums="21"
498-
// emit a greeting
523+
// emet una salutacio
499524
sayHello(greeting_ch)
500525

501-
// convert the greeting to uppercase
526+
// converteix la salutacio a majuscules
502527
convertToUpper(sayHello.out)
503528

504-
// collect all the greetings into one file
529+
// recull totes les salutacions en un fitxer
505530
collectGreetings(convertToUpper.out.collect(), params.batch)
506531

507-
// generate ASCII art of the greetings with cowpy
532+
// genera art ASCII de les salutacions amb cowpy
508533
cowpy(collectGreetings.out.outfile, params.character)
509534
```
510535

@@ -698,7 +723,25 @@ workflow HELLO {
698723
//
699724
// Collate and save software versions
700725
//
701-
softwareVersionsToYAML(ch_versions)
726+
def topic_versions = Channel.topic("versions")
727+
.distinct()
728+
.branch { entry ->
729+
versions_file: entry instanceof Path
730+
versions_tuple: true
731+
}
732+
733+
def topic_versions_string = topic_versions.versions_tuple
734+
.map { process, tool, version ->
735+
[ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
736+
}
737+
.groupTuple(by:0)
738+
.map { process, tool_versions ->
739+
tool_versions.unique().sort()
740+
"${process}:\n${tool_versions.join('\n')}"
741+
}
742+
743+
softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
744+
.mix(topic_versions_string)
702745
.collectFile(
703746
storeDir: "${params.outdir}/pipeline_info",
704747
name: 'hello_software_' + 'versions.yml',
@@ -719,7 +762,9 @@ workflow HELLO {
719762
*/
720763
```
721764

722-
En general, aquest codi fa molt poc a part d'algunes tasques de manteniment que tenen a veure amb capturar la versió de qualsevol eina de programari que s'executi al pipeline.
765+
Les línies destacades defineixen l'estructura del workflow composable: `workflow HELLO {`, `take:`, `main:` i `emit:`.
766+
El gran bloc entre les línies 17–34 és més substancial: gestiona la captura de versions de programari utilitzant topic channels, un mecanisme que nf-core està desplegant a tots els pipelines el 2026.
767+
Ho explicarem a la Part 4; de moment, tracteu-lo com a codi estàndard que podeu deixar sense modificar.
723768

724769
Necessitem afegir el codi rellevant de la versió composable del workflow original que vam desenvolupar a la secció 2.
725770

@@ -732,7 +777,8 @@ Abordarem això en les següents etapes:
732777

733778
!!! note "Nota"
734779

735-
Ignorarem la captura de versions per a aquesta primera passada i veurem com connectar-ho en una part posterior d'aquesta formació.
780+
Ignorarem el bloc de captura de versions per a aquesta primera passada.
781+
La Part 4 explica com funciona.
736782

737783
### 3.1. Copiar els mòduls i configurar les importacions de mòduls
738784

@@ -879,7 +925,25 @@ Aquest ordre té sentit perquè en un pipeline real, els processos emetrien info
879925
//
880926
// Collate and save software versions
881927
//
882-
softwareVersionsToYAML(ch_versions)
928+
def topic_versions = Channel.topic("versions")
929+
.distinct()
930+
.branch { entry ->
931+
versions_file: entry instanceof Path
932+
versions_tuple: true
933+
}
934+
935+
def topic_versions_string = topic_versions.versions_tuple
936+
.map { process, tool, version ->
937+
[ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
938+
}
939+
.groupTuple(by:0)
940+
.map { process, tool_versions ->
941+
tool_versions.unique().sort()
942+
"${process}:\n${tool_versions.join('\n')}"
943+
}
944+
945+
softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
946+
.mix(topic_versions_string)
883947
.collectFile(
884948
storeDir: "${params.outdir}/pipeline_info",
885949
name: 'hello_software_' + 'versions.yml',
@@ -908,7 +972,25 @@ Aquest ordre té sentit perquè en un pipeline real, els processos emetrien info
908972
//
909973
// Collate and save software versions
910974
//
911-
softwareVersionsToYAML(ch_versions)
975+
def topic_versions = Channel.topic("versions")
976+
.distinct()
977+
.branch { entry ->
978+
versions_file: entry instanceof Path
979+
versions_tuple: true
980+
}
981+
982+
def topic_versions_string = topic_versions.versions_tuple
983+
.map { process, tool, version ->
984+
[ process[process.lastIndexOf(':')+1..-1], " ${tool}: ${version}" ]
985+
}
986+
.groupTuple(by:0)
987+
.map { process, tool_versions ->
988+
tool_versions.unique().sort()
989+
"${process}:\n${tool_versions.join('\n')}"
990+
}
991+
992+
softwareVersionsToYAML(ch_versions.mix(topic_versions.versions_file))
993+
.mix(topic_versions_string)
912994
.collectFile(
913995
storeDir: "${params.outdir}/pipeline_info",
914996
name: 'hello_software_' + 'versions.yml',
@@ -949,15 +1031,15 @@ Finalment, necessitem actualitzar el bloc `emit` per incloure la declaració de
9491031

9501032
=== "Després"
9511033

952-
```groovy title="core-hello/workflows/hello.nf" linenums="55" hl_lines="2"
1034+
```groovy title="core-hello/workflows/hello.nf" linenums="69" hl_lines="2"
9531035
emit:
9541036
cowpy_hellos = cowpy.out
9551037
versions = ch_versions // channel: [ path(versions.yml) ]
9561038
```
9571039

9581040
=== "Abans"
9591041

960-
```groovy title="core-hello/workflows/hello.nf" linenums="55"
1042+
```groovy title="core-hello/workflows/hello.nf" linenums="69"
9611043
emit:
9621044
versions = ch_versions // channel: [ path(versions.yml) ]
9631045
```
@@ -1145,7 +1227,7 @@ La bona notícia és que les necessitats del nostre pipeline són molt més simp
11451227

11461228
Com a recordatori, així és com es veia la construcció del canal (tal com es veu al directori de solucions):
11471229

1148-
```groovy title="solutions/composable-hello/main.nf" linenums="10" hl_lines="4"
1230+
```groovy title="solutions/composable-hello/main.nf" linenums="10" hl_lines="2"
11491231
// crea un canal per a entrades des d'un fitxer CSV
11501232
greeting_ch = channel.fromPath(params.greeting)
11511233
.splitCsv()
@@ -1270,7 +1352,7 @@ I mentre hi som, ajustem els límits de recursos per defecte per assegurar que a
12701352

12711353
=== "Després"
12721354

1273-
```groovy title="core-hello/config/test.config" linenums="13" hl_lines="3-4"
1355+
```groovy title="core-hello/conf/test.config" linenums="13" hl_lines="3-4"
12741356
process {
12751357
resourceLimits = [
12761358
cpus: 2,
@@ -1282,7 +1364,7 @@ I mentre hi som, ajustem els límits de recursos per defecte per assegurar que a
12821364

12831365
=== "Abans"
12841366

1285-
```groovy title="core-hello/config/test.config" linenums="13" hl_lines="3-4"
1367+
```groovy title="core-hello/conf/test.config" linenums="13" hl_lines="3-4"
12861368
process {
12871369
resourceLimits = [
12881370
cpus: 4,

0 commit comments

Comments
 (0)