From b113e9b138a0d8676dd70721066556bea3bf5787 Mon Sep 17 00:00:00 2001 From: divinatus <milykim@hotmail.fr> Date: Mon, 5 Feb 2024 15:43:46 +0100 Subject: [PATCH] tentative internationalisation --- design_system_admin/inclure/head.html | 15 +- design_system_admin/inclure/header.html | 87 ++++++- .../lang/design_system_admin_en.php | 2 +- .../lang/design_system_admin_fr.php | 3 +- design_system_admin/mes_fonctions.php | 12 + design_system_admin/rubrique.html | 15 +- design_system_admin/sommaire.html | 15 +- .../lang/design_system_child_en.php | 18 ++ .../lang/design_system_child_fr.php | 10 +- design_system_child/rubrique.html | 219 ++++++++++++++++++ design_system_child/rubrique=2.html | 219 ++++++++++++++++++ design_system_child/sommaire.html | 54 +++++ .../formulaires/configurer_metasplus.html | 70 ++++++ .../paquet-squelettes_par_rubrique_ar.php | 15 ++ 14 files changed, 733 insertions(+), 21 deletions(-) create mode 100644 design_system_child/lang/design_system_child_en.php create mode 100644 design_system_child/rubrique.html create mode 100644 design_system_child/rubrique=2.html create mode 100644 design_system_child/sommaire.html create mode 100644 design_system_dependences/metasplus/formulaires/configurer_metasplus.html create mode 100644 design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ar.php diff --git a/design_system_admin/inclure/head.html b/design_system_admin/inclure/head.html index 597bf15..bbfea88 100644 --- a/design_system_admin/inclure/head.html +++ b/design_system_admin/inclure/head.html @@ -1,6 +1,15 @@ <!doctype html> + +[(#REM) Définition de la langue de la page] +[(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] +#SET{langue, #LANG} +#SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} +[(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] +[(#GET{langue}|setenv{lang})] + + [(#REM) L’attribut data-fr-theme n’est plus utilisable directement , il faut utiliser data-fr-scheme à la place ] -<html dir="#LANG_DIR" lang="#LANG" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" class="[(#LANG_DIR)][ (#LANG)] no-js" data-fr-scheme="[(#CONFIG_VALUE{parametre_affichage_defaut})]" [(#CONFIG_VALUE{_drapeau_en_berne}|=={oui}|oui) data-fr-mourning ]> +<html dir="#LANG_DIR" lang="#GET{langue}" xmlns="http://www.w3.org/1999/xhtml" xml:lang="#GET{langue}" class="[(#LANG_DIR)][ (#GET{langue})] no-js" data-fr-scheme="[(#CONFIG_VALUE{parametre_affichage_defaut})]" [(#CONFIG_VALUE{_drapeau_en_berne}|=={oui}|oui) data-fr-mourning ]> <head> <base href="#URL_SITE_SPIP" /> <BOUCLE_home(CONDITION){si #ENV{home}|=={yes}|oui}> @@ -10,8 +19,8 @@ <//B_home> <meta charset="utf-8"> - <meta http-equiv="content-language" content="#LANG" /> - <title>[(#ENV{titrepage}|supprimer_tags)] - [(#ENV{titre}|supprimer_tags)]</title> + [(#ENV{home}|=={yes}|non) <title>[(#ENV{titrepage}|supprimer_tags)] - <:design_system_child:dsfr_titresite:/></title>] + [(#ENV{home}|=={yes}|oui) <title><:design_system_child:dsfr_accueil:/> - <:design_system_child:dsfr_titresite:/></title>] <meta name="format-detection" content="telephone=no"> [<meta name="description" content="(#ENV{descriptif}|noP)" />] [(#REM) diff --git a/design_system_admin/inclure/header.html b/design_system_admin/inclure/header.html index 2cb7f50..86e6ef1 100644 --- a/design_system_admin/inclure/header.html +++ b/design_system_admin/inclure/header.html @@ -1,19 +1,19 @@ <body class="front path-frontpage page-node-type-page"> <div class="fr-skiplinks" id="top"> - <nav class="fr-container" role="navigation" aria-label="Accès rapide"> + <nav class="fr-container" role="navigation" aria-label="<:design_system_child:dsfr_skiplinks_aria_label:/>"> <ul class="fr-skiplinks__list"> <li> - <a class="fr-link" href="#SELF#header-navigation">Menu</a> + <a class="fr-link" href="#SELF#header-navigation"><:design_system_child:dsfr_skiplinks_menu:/></a> </li> <li> - <a class="fr-link" href="#SELF#contenu">Contenu</a> + <a class="fr-link" href="#SELF#contenu"><:design_system_child:dsfr_skiplinks_contenu:/></a> </li> <li> - <a class="fr-link" href="#SELF#search-399">Moteur de recherche</a> + <a class="fr-link" href="#SELF#search-399"><:design_system_child:dsfr_skiplinks_search:/></a> </li> <li> - <a class="fr-link" href="#SELF#footer">Pied de page</a> + <a class="fr-link" href="#SELF#footer"><:design_system_child:dsfr_skiplinks_footer:/></a> </li> </ul> </nav> @@ -112,6 +112,83 @@ <//B_masquer_parametres_affichage> <//B_compteur_boucle> </BOUCLE_nombre_delement> + #SET{langues_du_site,''} + <BOUCLE_autoriser_auth_selang(CONDITION){si #CONFIG_VALUE{_masquer_langue}|=={oui}|non}> + <BOUCLE_rubrique_selang(CONDITION){si #ID_RUBRIQUE|oui}> + <BOUCLE_rubrique_principal(RUBRIQUES) {id_rubrique}> + <BOUCLE_traductions_rubrique(RUBRIQUES) {traduction}> </BOUCLE_traductions_rubrique>#SET{nbr_langues,#TOTAL_BOUCLE}</B_traductions_rubrique> + </BOUCLE_rubrique_principal> + </BOUCLE_rubrique_selang> + + <BOUCLE_article_selang(CONDITION){si #ID_ARTICLE|oui}> + <BOUCLE_article_principal(ARTICLES) {id_article}> + <BOUCLE_traductions_article(ARTICLES) {traduction}> </BOUCLE_traductions_article>#SET{nbr_langues,#TOTAL_BOUCLE}</B_traductions_article> + </BOUCLE_article_principal> + </BOUCLE_article_selang> + #SET{langue_page, #LANG} + #SET{titre_langues_site, #ARRAY} + <BOUCLE_nombre_de_langue_site(POUR){tableau #CONFIG_VALUE{nombre_de_langue}|range{1}}> + #SET{cle_langue, #CONFIG_VALUE{langue_#COMPTEUR_BOUCLE}} + #SET{valeur_langue, #CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}} + #SET{titre_langues_site, #GET{titre_langues_site}|array_merge{#ARRAY{#GET{valeur_langue},#GET{cle_langue}}} + </BOUCLE_nombre_de_langue_site> + + [(#GET{nbr_langues}|>{1}|oui) #SET{afficher_langues,oui}] + [(#ENV{home}|=={yes}|oui) #SET{afficher_langues,oui}] + test #LANG ::: #GET{afficher_langues} ::: #GET{nbr_langues} :::: #ENV{home}<br> + <BOUCLE_test_nombre_de_langues(CONDITION){si #GET{afficher_langues}|=={oui}|oui}> + <li> + <nav role="navigation" class="fr-translate fr-nav" data-fr-js-navigation="true"> + <div class="fr-nav__item fr-nav__item--align-right" data-fr-js-navigation-item="true"> + <button class="fr-translate__btn fr-btn fr-btn--tertiary" aria-controls="translate-516" aria-expanded="false" title="Sélectionner une langue" data-fr-js-collapse-button="true"> + <span id="langue_utilisee">[(#LANG|strtoupper)]</span><span class="fr-hidden-lg"> - [(#LANG|traduire_cfg)]</span> + </button> + <div class="fr-collapse fr-translate__menu fr-menu" id="translate-516" data-fr-js-collapse="true"> + <ul class="fr-menu__list"> + <BOUCLE_article_selang2(CONDITION){si #ID_ARTICLE|oui}> + <BOUCLE_article_principal2(ARTICLES) {id_article}> + <BOUCLE_traductions_article2(ARTICLES) {traduction}> + <li> + <a class="language-dsfr fr-translate__language fr-nav__link " hreflang="#LANG" lang="#LANG" href="#URL_ARTICLE" [(#GET{langue_page}|=={#LANG}|oui) aria-current="true"]>[(#LANG|strtoupper)] - [(#LANG|traduire_cfg)]</a> + </li> + </BOUCLE_traductions_article2> + </BOUCLE_article_principal2> + </BOUCLE_article_selang2> + <BOUCLE_article_home(CONDITION){si #ENV{home}|=={yes}|oui}> + <BOUCLE_nombre_de_langue_home(POUR){tableau #CONFIG_VALUE{nombre_de_langue}|range{1}}> + #SET{compteur_boucle,#COMPTEUR_BOUCLE} + #SET{home_lang, #SELF|extraire_chemin_url|replace{'/',''}} + #SET{value_langue, #CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}} + + #SET{titre_lang, #CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}|traduire_cfg} + + + <li> + <a class="language-dsfr fr-translate__language fr-nav__link " hreflang="#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}" lang="#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}" [(#GET{value_langue}|=={#CONFIG_VALUE{langue_par_defaut}}|oui) href="/"] [(#GET{value_langue}|=={#CONFIG_VALUE{langue_par_defaut}}|non) href="/#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}/"] [(#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}|=={#LANG}|oui) aria-current="true"]>[(#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}|strtoupper)] - [(#CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}|traduire_cfg)]</a> + </li> + </BOUCLE_nombre_de_langue_home> + </BOUCLE_article_home> + <BOUCLE_rubrique_selang2(CONDITION){si #ID_RUBRIQUE|oui}> + <BOUCLE_rubrique_principal2(RUBRIQUES) {id_rubrique}> + <BOUCLE_traductions_rubrique2(RUBRIQUES) {traduction}> + #SET{value_langue, #CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}} + #SET{titre_lang, #CONFIG_VALUE{value_langue_#COMPTEUR_BOUCLE}|traduire_cfg} + <li> + <a class="language-dsfr fr-translate__language fr-nav__link " hreflang="#GET{value_langue}" lang="#GET{value_langue}" href="#URL_RUBRIQUE" [(#GET{langue_page}|=={#LANG}|oui) aria-current="true"]>[(#LANG|strtoupper)] - [(#LANG|traduire_cfg)]</a> + </li> + </BOUCLE_traductions_rubrique2> + </BOUCLE_rubrique_principal2> + </BOUCLE_rubrique_selang2> + + <//B__article_home> + <//B_article_selang2> + </ul> + </div> + </div> + </nav> + </li> + </BOUCLE_test_nombre_de_langues> + </BOUCLE_autoriser_auth_selang> </ul> </BOUCLE_masquer_liste_acces_rapide> </div> diff --git a/design_system_admin/lang/design_system_admin_en.php b/design_system_admin/lang/design_system_admin_en.php index d2b08b9..93bc14e 100644 --- a/design_system_admin/lang/design_system_admin_en.php +++ b/design_system_admin/lang/design_system_admin_en.php @@ -160,5 +160,5 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ 'cfg_download_doc' => 'Download the document', 'cfg_version_texte' => 'Text version', 'cfg_enlarge_image' => 'Enlarge image', - 'sndi_description' => 'This site is administered by the General Commission for Sustainable Development (CGDD), a cross-sectional department of the Ministry of Ecological Transition and Territorial Cohesion (MTECT), in charge of steering the implementation of the SNDI. This interministerial strategy brings together the Ministries of Agriculture, the Economy, Europe and Foreign Affairs and Research.', + ]; diff --git a/design_system_admin/lang/design_system_admin_fr.php b/design_system_admin/lang/design_system_admin_fr.php index 803a600..a274b93 100644 --- a/design_system_admin/lang/design_system_admin_fr.php +++ b/design_system_admin/lang/design_system_admin_fr.php @@ -7,7 +7,6 @@ if (!defined('_ECRIRE_INC_VERSION')) { } $GLOBALS[$GLOBALS['idx_lang']] = [ - // D 'design_system_admin_titre' => 'Systeme de design de l\'état', @@ -183,5 +182,5 @@ $GLOBALS[$GLOBALS['idx_lang']] = [ 'cfg_download_doc' => 'Télécharger le document', 'cfg_version_texte' => 'Version texte', 'cfg_enlarge_image' => 'Agrandir', - 'sndi_description' => 'Ce site est administré par le Commissariat général au développement durable (CGDD), direction transversale du ministère de la Transition écologique et de la Cohésion des territoires (MTECT), en charge du pilotage de la mise en Å“uvre de la SNDI. Cette stratégie interministérielle associe les ministères de l’Agriculture, de l’Économie, de l’Europe et des affaires étrangères et de la Recherche', + ]; diff --git a/design_system_admin/mes_fonctions.php b/design_system_admin/mes_fonctions.php index 515004f..b84f657 100644 --- a/design_system_admin/mes_fonctions.php +++ b/design_system_admin/mes_fonctions.php @@ -85,6 +85,18 @@ function bel_env($env) { return $res; } +function traduire_cfg($lang) { + return _T('design_system_admin:dsfr_cfg_' . $lang); +} +function supprimer_html($texte) { + return strip_tags($texte); +} +function extraire_chemin_url($url) { + $parsed_url = parse_url($url); + return $parsed_url['path'] . (isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''); +} + + function noP($texte){ $texte = preg_replace("@</p>@iS", "", $texte); $texte = preg_replace("@<p\b.*>@UiS", "", $texte); diff --git a/design_system_admin/rubrique.html b/design_system_admin/rubrique.html index 4dcb538..83eed83 100644 --- a/design_system_admin/rubrique.html +++ b/design_system_admin/rubrique.html @@ -1,9 +1,16 @@ +[(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] + #SET{langue, #LANG} + #SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} + [(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] + [(#GET{langue}|setenv{lang})] + + <BOUCLE_principale(RUBRIQUES) {id_rubrique}> [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] <BOUCLE_descriptif_rubrique(CONDITION){si #DESCRIPTIF|oui}> - <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#DESCRIPTIF, env} /> + <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#DESCRIPTIF, env, lang=#LANG} /> </BOUCLE_descriptif_rubrique> - <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#CONFIG_VALUE{meta_description}, env} /> + <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#CONFIG_VALUE{meta_description}, env, lang=#LANG} /> <//B_descriptif_rubrique> <INCLURE{fond=inclure/header, home=no, env} /> [(#REM) code de votre page sommaire ci-dessous] @@ -193,7 +200,7 @@ <div class="region-highlight fr-col-12"> - <INCLURE{fond=inclure/partage-rs,self=#SELF} /> + <INCLURE{fond=inclure/partage-rs,self=#SELF, env, home=no, lang=#LANG} /> </div> </div> @@ -208,5 +215,5 @@ </main> [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] - <INCLURE{fond=inclure/footer,self=#SELF, env, home=no} /> + <INCLURE{fond=inclure/footer,self=#SELF, env, home=no, lang=#LANG} /> </BOUCLE_principale> \ No newline at end of file diff --git a/design_system_admin/sommaire.html b/design_system_admin/sommaire.html index f9bd86d..f204848 100644 --- a/design_system_admin/sommaire.html +++ b/design_system_admin/sommaire.html @@ -1,6 +1,13 @@ -[(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] - <INCLURE{fond=inclure/head, home=yes, titre=#CONFIG_VALUE{title_onglet_navigateur}, titrepage=Accueil, descriptif=#CONFIG_VALUE{meta_description}, env} /> - <INCLURE{fond=inclure/header, home=yes, env} /> + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + + [(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] + #SET{langue, #LANG} + #SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} + [(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] + [(#GET{langue}|setenv{lang})] + + <INCLURE{fond=inclure/head, home=yes, titre=#CONFIG_VALUE{title_onglet_navigateur}, titrepage=Accueil, descriptif=#CONFIG_VALUE{meta_description}, env, lang=#LANG} /> + <INCLURE{fond=inclure/header, home=yes, env, lang=#LANG} /> [(#REM) code de votre page sommaire ci-dessous fr-py-16v] <main role="main" id="contenu"> @@ -44,4 +51,4 @@ [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] - <INCLURE{fond=inclure/footer,self=#SELF, env, home=yes} /> \ No newline at end of file + <INCLURE{fond=inclure/footer,self=#SELF, env, home=yes, lang=#LANG} /> \ No newline at end of file diff --git a/design_system_child/lang/design_system_child_en.php b/design_system_child/lang/design_system_child_en.php new file mode 100644 index 0000000..ab86ae5 --- /dev/null +++ b/design_system_child/lang/design_system_child_en.php @@ -0,0 +1,18 @@ +<?php + +// This is a SPIP language file -- Ceci est un fichier langue de SPIP + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = [ + + 'dsfr_skiplinks_aria_label' => 'Rapid access', + 'dsfr_skiplinks_menu' => 'Menu', + 'dsfr_skiplinks_search' => 'Search engine', + 'dsfr_skiplinks_footer' => 'Footer', + 'dsfr_skiplinks_contenu' => 'Content', + 'dsfr_titresite' => 'Theme DSFR version 1.11.0 for SPIP 4+', + 'dsfr_accueil' => 'Home', +]; diff --git a/design_system_child/lang/design_system_child_fr.php b/design_system_child/lang/design_system_child_fr.php index a907117..253594a 100644 --- a/design_system_child/lang/design_system_child_fr.php +++ b/design_system_child/lang/design_system_child_fr.php @@ -8,6 +8,12 @@ if (!defined('_ECRIRE_INC_VERSION')) { $GLOBALS[$GLOBALS['idx_lang']] = [ - // T - 'design_system_child_titre' => 'Thème enfant DSFR', + 'dsfr_skiplinks_aria_label' => 'Accès rapide', + 'dsfr_skiplinks_menu' => 'Menu', + 'dsfr_skiplinks_search' => 'Moteur de recherche', + 'dsfr_skiplinks_footer' => 'Pied de page', + 'dsfr_skiplinks_contenu' => 'Contenu', + 'dsfr_titresite' => 'Thème DSFR version 1.11.0 pour SPIP 4+', + 'dsfr_accueil' => 'Accueil', + ]; diff --git a/design_system_child/rubrique.html b/design_system_child/rubrique.html new file mode 100644 index 0000000..83eed83 --- /dev/null +++ b/design_system_child/rubrique.html @@ -0,0 +1,219 @@ +[(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] + #SET{langue, #LANG} + #SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} + [(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] + [(#GET{langue}|setenv{lang})] + + +<BOUCLE_principale(RUBRIQUES) {id_rubrique}> + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + <BOUCLE_descriptif_rubrique(CONDITION){si #DESCRIPTIF|oui}> + <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#DESCRIPTIF, env, lang=#LANG} /> + </BOUCLE_descriptif_rubrique> + <INCLURE{fond=inclure/head, home=no, titre=#TITRE, descriptif=#CONFIG_VALUE{meta_description}, env, lang=#LANG} /> + <//B_descriptif_rubrique> + <INCLURE{fond=inclure/header, home=no, env} /> + [(#REM) code de votre page sommaire ci-dessous] + + <main role="main" id="contenu"> + <div class="fr-container-fluid ds_banner" id="contenu"> + <div class="fr-container"> + + + <INCLURE{fond=inclure/fil-ariane, env, title=#TITRE, type=rubrique} /> + + <section class="bloctitre fr-mb-4v" > + <style> + .darkmode{display:none;width:100%;} + .lightmode{display:block;width:100%;} + [data-fr-theme="dark"] .darkmode {display:block;margin-top:-1rem;} + [data-fr-theme="dark"] .lightmode{display:none;margin-top:-1rem;} + [data-fr-theme="dark"] .bg_dark_mode{background-color: #6e6e6e;} + .fr-h4 { + order: 0; + margin-bottom: 1rem; + } + .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__desc, .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__title { + margin-bottom: 1rem; + } + .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__desc { + margin-top: 1rem; + } + .fr-tags-group > li { + line-height: initial; + } + .bloctitre .motcle:hover { + background: var(--grey-50-1000); + color: var(--background-contrast-grey); + } + .fr-tile__img { + width:100%; + height:100%; + margin:0; + } + </style> + [(#REM) on affiche ou non la date en fonction du mot clé Afficher date] + #SET{affichage_date,oui} + <BOUCLE_mots_tous(MOTS){id_mot=30}{id_rubrique}{par titre}> + #SET{affichage_date, #TITRE} + </BOUCLE_mots_tous> + <div class="[ (#ID_ARTICLE|=={105}?{fr-pb-1v bg_dark_mode,bg_dark_mode})] "> + <div class="fr-grid-row fr-grid-row--gutters"> + <div class="fr-col-12 [(#GET{affichage_date}|=={oui}|?{fr-col-md-9,fr-col-md-12})]"> + <h1 class="nonaccueil fr-ml-5v">#TITRE</h1> + </div> + <BOUCLE_verifie_affichage(CONDITION){si #GET{affichage_date}|=={oui}|oui}> + <div class="fr-col-12 fr-col-md-3"> + <p class="fr-tag fr-fi-calendar-line fr-tag--icon-left fr-tag--sm fr-mt-3v"> + <BOUCLE_test_lang_date(CONDITION){si #LANG|=={fr}|oui}> + #GET{published} [(#DATE|affdate)] + </BOUCLE_test_lang_date> + #GET{published} [(#DATE|affdate{F j})], [(#DATE|affdate{Y})] + <//B_test_lang_date> + </p> + </div> + </BOUCLE_verifie_affichage> + </div> + + </div> + </section> + [(#REM) Contenu principal : contenu de l'article] + + + <div class="fr-grid-row fr-grid-row--center fr-grid-row--gutters fr-mb-3v"> + + + <B_srub> + <div class="aside fr-col-12 fr-col-md-12 [(#TOTAL_BOUCLE|>={1}|?{fr-col-lg-4, fr-hidden})] "> + + [(#REM) Rubriques dans la meme rubrique ] + <div class="fr-sidemenu fr-sidemenu--left "> + <nav class="fr-sidemenu" role="navigation" aria-label="Menu latéral"> + <div class="fr-sidemenu__inner"> + <button class="fr-sidemenu__btn" hidden aria-controls="fr-sidemenu-wrapper" aria-expanded="true">Dans cette rubrique</button> + <div class="fr-collapse" id="fr-sidemenu-wrapper"> + <div class="fr-sidemenu__title">Sommaire</div> + <ul class="fr-sidemenu__list"> + <BOUCLE_srub(RUBRIQUES){id_parent}{par num titre}{doublons}> + <li class="fr-sidemenu__item #EXPOSE{fr-sidemenu__item--active} "> + <button class="fr-sidemenu__btn" aria-expanded="false" aria-controls="fr-sidemenu-item-#ID_RUBRIQUE">#TITRE</button> + <div class="fr-collapse" id="fr-sidemenu-item-#ID_RUBRIQUE"> + <ul class="fr-sidemenu__list"> + <BOUCLE_dans_srub(ARTICLES){id_rubrique}{par num titre}> + <li class="fr-sidemenu__item #EXPOSE{fr-sidemenu__item--active}"><a class="fr-sidemenu__link" href="#URL_ARTICLE" target="_self">#TITRE</a></li> + <BOUCLE_recursive(BOUCLE_srub)></BOUCLE_recursive> + </BOUCLE_dans_srub> + </ul> + </div> + </li> + </BOUCLE_srub> + </ul> + </div> + + </nav> + </div></div><!--.aside--> + </B_srub> + + <div class="fr-col-12 fr-col-md-12 fr-col-lg-8"> + <div class="content hentry" id="content"> + + <div class="fr-col-12"> + [<p class="#EDIT{texte} texte surlignable">(#TEXTE)</p>] + + </div> + + </div> + + + [(#REM) Articles de la rubrique ] + + <B_articles> + <div class="menu menu_articles actualites-article">#ANCRE_PAGINATION + + <div class="actus-liste-css "> + [(#REM) Articles de la rubrique ] + <div class=" "> + <BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}{!par date} {pagination 20}> + <div class="fr-card fr-enlarge-link fr-card--horizontal fr-card--horizontal-half fr-card--sm hauteur-limitee fr-mb-5v"> + <div class="fr-card__body fr-background-alt--orange-terre-battue"> + <div class="fr-card__content"> + <h3 class="fr-card__title"> + <a href="#URL_ARTICLE">#TITRE</a> + </h3> + <p class="fr-card__desc">[(#INTRODUCTION{250}|textebrut)]</p> + + <div class="fr-card__start"> + + <B_mots_cles> + <ul class="fr-tags-group"> + <BOUCLE_mots_cles(MOTS){id_article}{id_groupe IN 2,3}> + <li> + <p class="fr-tag">#TITRE</p> + </li> + </BOUCLE_mots_cles> + </ul> + </B_mots_cles> + + <p class="fr-card__detail fr-icon-calendar-line">[(#DATE|affdate)] + + </p> + </div> + [(#REM) div class="fr-card__end">p class="fr-card__detail fr-icon-warning-fill">détail (optionnel)/p>div>] + </div> + </div> + <BOUCLE_actualites(RUBRIQUES){id_rubrique=#ID_RUBRIQUE}{!id_rubrique IN 17,18}> + <div class="fr-card__header"> + <div class="fr-card__img nomaxheight"> + + [<div class="fr-tile__img">(#LOGO_ARTICLE_RUBRIQUE|image_reduire{400,*}|?{#LOGO_ARTICLE_RUBRIQUE|image_reduire{400,*},'<object type="image/svg+xml" data="/IMG/svg/icone_actu_light_mode.svg" width="200" height="200"></object>'})</div>] + + + + </div> + </div> + </BOUCLE_actualites> + </div> + + + + + + </BOUCLE_articles> + </div> + [<p class="pagination fr-mt-3v" style="text-align: center;">(#PAGINATION{page_precedent_suivant})</p>] + </div> + </div> + </B_articles> + + + + + + + + + + + [<div class="notes"><hr />(#NOTES)</div>] + + + + + <div class="region-highlight fr-col-12"> + <INCLURE{fond=inclure/partage-rs,self=#SELF, env, home=no, lang=#LANG} /> + </div> + + </div> + + </div> + + </div> + </div> + <//B_test_configurated> + + + + </main> + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + <INCLURE{fond=inclure/footer,self=#SELF, env, home=no, lang=#LANG} /> +</BOUCLE_principale> \ No newline at end of file diff --git a/design_system_child/rubrique=2.html b/design_system_child/rubrique=2.html new file mode 100644 index 0000000..691c35e --- /dev/null +++ b/design_system_child/rubrique=2.html @@ -0,0 +1,219 @@ +[(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] + #SET{langue, #LANG} + #SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} + [(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] + [(#GET{langue}|setenv{lang})] + + +<BOUCLE_principale(RUBRIQUES) {id_rubrique}> + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + <BOUCLE_descriptif_rubrique(CONDITION){si #DESCRIPTIF|oui}> + <INCLURE{fond=inclure/head, home=yes, titre=#TITRE, descriptif=#DESCRIPTIF, env, lang=#LANG} /> + </BOUCLE_descriptif_rubrique> + <INCLURE{fond=inclure/head, home=yes, titre=#TITRE, descriptif=#CONFIG_VALUE{meta_description}, env, lang=#LANG} /> + <//B_descriptif_rubrique> + <INCLURE{fond=inclure/header, home=yes, env} /> + [(#REM) code de votre page sommaire ci-dessous] + + <main role="main" id="contenu"> + <div class="fr-container-fluid ds_banner" id="contenu"> + <div class="fr-container"> + + + <INCLURE{fond=inclure/fil-ariane, env, title=#TITRE, type=rubrique} /> + + <section class="bloctitre fr-mb-4v" > + <style> + .darkmode{display:none;width:100%;} + .lightmode{display:block;width:100%;} + [data-fr-theme="dark"] .darkmode {display:block;margin-top:-1rem;} + [data-fr-theme="dark"] .lightmode{display:none;margin-top:-1rem;} + [data-fr-theme="dark"] .bg_dark_mode{background-color: #6e6e6e;} + .fr-h4 { + order: 0; + margin-bottom: 1rem; + } + .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__desc, .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__title { + margin-bottom: 1rem; + } + .fr-card.fr-enlarge-link:not(.fr-card--no-arrow) .fr-card__body > .fr-card__desc { + margin-top: 1rem; + } + .fr-tags-group > li { + line-height: initial; + } + .bloctitre .motcle:hover { + background: var(--grey-50-1000); + color: var(--background-contrast-grey); + } + .fr-tile__img { + width:100%; + height:100%; + margin:0; + } + </style> + [(#REM) on affiche ou non la date en fonction du mot clé Afficher date] + #SET{affichage_date,oui} + <BOUCLE_mots_tous(MOTS){id_mot=30}{id_rubrique}{par titre}> + #SET{affichage_date, #TITRE} + </BOUCLE_mots_tous> + <div class="[ (#ID_ARTICLE|=={105}?{fr-pb-1v bg_dark_mode,bg_dark_mode})] "> + <div class="fr-grid-row fr-grid-row--gutters"> + <div class="fr-col-12 [(#GET{affichage_date}|=={oui}|?{fr-col-md-9,fr-col-md-12})]"> + <h1 class="nonaccueil fr-ml-5v">#TITRE</h1> + </div> + <BOUCLE_verifie_affichage(CONDITION){si #GET{affichage_date}|=={oui}|oui}> + <div class="fr-col-12 fr-col-md-3"> + <p class="fr-tag fr-fi-calendar-line fr-tag--icon-left fr-tag--sm fr-mt-3v"> + <BOUCLE_test_lang_date(CONDITION){si #LANG|=={fr}|oui}> + #GET{published} [(#DATE|affdate)] + </BOUCLE_test_lang_date> + #GET{published} [(#DATE|affdate{F j})], [(#DATE|affdate{Y})] + <//B_test_lang_date> + </p> + </div> + </BOUCLE_verifie_affichage> + </div> + + </div> + </section> + [(#REM) Contenu principal : contenu de l'article] + + + <div class="fr-grid-row fr-grid-row--center fr-grid-row--gutters fr-mb-3v"> + + + <B_srub> + <div class="aside fr-col-12 fr-col-md-12 [(#TOTAL_BOUCLE|>={1}|?{fr-col-lg-4, fr-hidden})] "> + + [(#REM) Rubriques dans la meme rubrique ] + <div class="fr-sidemenu fr-sidemenu--left "> + <nav class="fr-sidemenu" role="navigation" aria-label="Menu latéral"> + <div class="fr-sidemenu__inner"> + <button class="fr-sidemenu__btn" hidden aria-controls="fr-sidemenu-wrapper" aria-expanded="true">Dans cette rubrique</button> + <div class="fr-collapse" id="fr-sidemenu-wrapper"> + <div class="fr-sidemenu__title">Sommaire</div> + <ul class="fr-sidemenu__list"> + <BOUCLE_srub(RUBRIQUES){id_parent}{par num titre}{doublons}> + <li class="fr-sidemenu__item #EXPOSE{fr-sidemenu__item--active} "> + <button class="fr-sidemenu__btn" aria-expanded="false" aria-controls="fr-sidemenu-item-#ID_RUBRIQUE">#TITRE</button> + <div class="fr-collapse" id="fr-sidemenu-item-#ID_RUBRIQUE"> + <ul class="fr-sidemenu__list"> + <BOUCLE_dans_srub(ARTICLES){id_rubrique}{par num titre}> + <li class="fr-sidemenu__item #EXPOSE{fr-sidemenu__item--active}"><a class="fr-sidemenu__link" href="#URL_ARTICLE" target="_self">#TITRE</a></li> + <BOUCLE_recursive(BOUCLE_srub)></BOUCLE_recursive> + </BOUCLE_dans_srub> + </ul> + </div> + </li> + </BOUCLE_srub> + </ul> + </div> + + </nav> + </div></div><!--.aside--> + </B_srub> + + <div class="fr-col-12 fr-col-md-12 fr-col-lg-8"> + <div class="content hentry" id="content"> + + <div class="fr-col-12"> + [<p class="#EDIT{texte} texte surlignable">(#TEXTE)</p>] + + </div> + + </div> + + + [(#REM) Articles de la rubrique ] + + <B_articles> + <div class="menu menu_articles actualites-article">#ANCRE_PAGINATION + + <div class="actus-liste-css "> + [(#REM) Articles de la rubrique ] + <div class=" "> + <BOUCLE_articles(ARTICLES) {id_rubrique} {par num titre}{!par date} {pagination 20}> + <div class="fr-card fr-enlarge-link fr-card--horizontal fr-card--horizontal-half fr-card--sm hauteur-limitee fr-mb-5v"> + <div class="fr-card__body fr-background-alt--orange-terre-battue"> + <div class="fr-card__content"> + <h3 class="fr-card__title"> + <a href="#URL_ARTICLE">#TITRE</a> + </h3> + <p class="fr-card__desc">[(#INTRODUCTION{250}|textebrut)]</p> + + <div class="fr-card__start"> + + <B_mots_cles> + <ul class="fr-tags-group"> + <BOUCLE_mots_cles(MOTS){id_article}{id_groupe IN 2,3}> + <li> + <p class="fr-tag">#TITRE</p> + </li> + </BOUCLE_mots_cles> + </ul> + </B_mots_cles> + + <p class="fr-card__detail fr-icon-calendar-line">[(#DATE|affdate)] + + </p> + </div> + [(#REM) div class="fr-card__end">p class="fr-card__detail fr-icon-warning-fill">détail (optionnel)/p>div>] + </div> + </div> + <BOUCLE_actualites(RUBRIQUES){id_rubrique=#ID_RUBRIQUE}{!id_rubrique IN 17,18}> + <div class="fr-card__header"> + <div class="fr-card__img nomaxheight"> + + [<div class="fr-tile__img">(#LOGO_ARTICLE_RUBRIQUE|image_reduire{400,*}|?{#LOGO_ARTICLE_RUBRIQUE|image_reduire{400,*},'<object type="image/svg+xml" data="/IMG/svg/icone_actu_light_mode.svg" width="200" height="200"></object>'})</div>] + + + + </div> + </div> + </BOUCLE_actualites> + </div> + + + + + + </BOUCLE_articles> + </div> + [<p class="pagination fr-mt-3v" style="text-align: center;">(#PAGINATION{page_precedent_suivant})</p>] + </div> + </div> + </B_articles> + + + + + + + + + + + [<div class="notes"><hr />(#NOTES)</div>] + + + + + <div class="region-highlight fr-col-12"> + <INCLURE{fond=inclure/partage-rs,self=#SELF, env, home=yes, lang=#LANG} /> + </div> + + </div> + + </div> + + </div> + </div> + <//B_test_configurated> + + + + </main> + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=yes pour les autres pages] + <INCLURE{fond=inclure/footer,self=#SELF, env, home=yes, lang=#LANG} /> +</BOUCLE_principale> \ No newline at end of file diff --git a/design_system_child/sommaire.html b/design_system_child/sommaire.html new file mode 100644 index 0000000..f204848 --- /dev/null +++ b/design_system_child/sommaire.html @@ -0,0 +1,54 @@ + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + + [(#REM) les contenus doivent être présent dans un répertoire titré de la valeur de la langue (exemples: anglais -> en, français -> fr ....)] + #SET{langue, #LANG} + #SET{langue_definie, #SELF|extraire_chemin_url|replace{'/',''}|strlen} + [(#GET{langue_definie}|>{1}|oui) #SET{langue, #SELF|extraire_chemin_url|replace{'/',''}}] + [(#GET{langue}|setenv{lang})] + + <INCLURE{fond=inclure/head, home=yes, titre=#CONFIG_VALUE{title_onglet_navigateur}, titrepage=Accueil, descriptif=#CONFIG_VALUE{meta_description}, env, lang=#LANG} /> + <INCLURE{fond=inclure/header, home=yes, env, lang=#LANG} /> + [(#REM) code de votre page sommaire ci-dessous fr-py-16v] + + <main role="main" id="contenu"> + <div class="fr-container"> + <h1>Bienvenue sur le Plugin SPIP pour le Système de Design de l'État</h1> + <p>Transformez votre site SPIP avec l'élégance et la fonctionnalité du Design Système de l'État</p> + <div> + <p><strong>Bonjour</strong>,</p> + <p>Vous êtes sur la page d'accueil du plugin SPIP qui vous permet d'intégrer facilement le Système de Design de l'État français à votre site SPIP. Ce plugin a été conçu pour rendre votre site plus accessible, plus fonctionnel et en phase avec les standards modernes de design web.</p> + <h2>Fonctionnalités</h2> + <ul> + <li><strong>Intégration facile</strong> : Installez le plugin et activez-le, votre site SPIP adoptera instantanément le design du Système de l'État.</li> + <li><strong>Accessibilité</strong> : Conçu avec une attention particulière à l'accessibilité pour rendre votre site utilisable par le plus grand nombre.</li> + <li><strong>Responsive</strong> : Adaptatif sur tous les appareils, du mobile au desktop.</li> + <li><strong>Personnalisable</strong> : Options pour personnaliser les couleurs, les typographies et plus encore.</li> + </ul> + <h2>Fonctionnalités</h2> + <ol> + <li><strong>Installation</strong>: Téléchargez et installez le plugin via l'interface d'administration de SPIP.</li> + <li><strong>Activation</strong>: Activez le plugin dans la section des plugins de SPIP.</li> + <li><strong>Personnalisation</strong>: Accédez aux options de personnalisation pour ajuster le design selon vos besoins.</li> + <li><strong>Prévisualisation et Déploiement</strong>: Prévisualisez les changements et déployez-les sur votre site.</li> + </ol> + <h2>Ressources</h2> + <ul> + <li><a href="https://dsfr-spip.digital-vision-pro.com/">Site de test</a></li> + <li><a href="https://gitlab-forge.din.developpement-durable.gouv.fr/pub/cgdd-public/bun-poleweb/systeme-de-design-de-l-etat/cms-spip/z-dsfr/-/wikis/home" target="_blank">Documentation</a></li> + <li><a href="https://gitlab-forge.din.developpement-durable.gouv.fr/pub/cgdd-public/bun-poleweb/systeme-de-design-de-l-etat/cms-spip/z-dsfr" target="_blank">Git public</a></li> + <li><a href="https://www.spip.net/fr_article2670.html" target="_new">Télécharger SPIP</a></li> + <li><a href="https://www.spip.net/" target="_new">Documentation SPIP</a></li> + </ul> + <h2>Minima requis</h2> + <p>Pour pouvoir utiliser ce plugin, vous devez avoir votre site en version 4.2.<br>La première version utilisée pour ce plugin est la version spip 4.2.4.<br>La version de spip utilisée sera indiquée dans la documentation ainsi que sur le site de test.</p> + <p>Une archive des versions sera aussi disponible.</p> + <p>Si vous voyez cette page, c'est que vous avez oublié à minima, de créer les fichiers sommaire.html, article.html et rubrique.html dans le répertoire design_system_child.<br>Des fichiers exemples avec le code minimal à avoir sont disponibles dans le répertoire design_system_child (sommaire.md, article.md, rubrique.md). Vous devrez renommer ces fichiers avec une extension .html pour qu'ils soient pris en compte.</p> + </div> + </div> + </main> + + + + + [(#REM) Ne pas supprimer la ligne ci-dessous home=yes si page accueil (sommaire.html) home=no pour les autres pages] + <INCLURE{fond=inclure/footer,self=#SELF, env, home=yes, lang=#LANG} /> \ No newline at end of file diff --git a/design_system_dependences/metasplus/formulaires/configurer_metasplus.html b/design_system_dependences/metasplus/formulaires/configurer_metasplus.html new file mode 100644 index 0000000..50163c2 --- /dev/null +++ b/design_system_dependences/metasplus/formulaires/configurer_metasplus.html @@ -0,0 +1,70 @@ +<div class="formulaire_spip formulaire_cfg formulaire_#FORM"> + +<h3 class='titrem'><:metasplus:titre_config_metasplus:></h3> + +[<p class="reponse_formulaire reponse_formulaire_ok">(#ENV*{message_ok})</p>] +[<p class="reponse_formulaire reponse_formulaire_erreur">(#ENV*{message_erreur})</p>] + +<form method="post" action="#ENV{action}" enctype="multipart/form-data"> +<div> + + #ACTION_FORMULAIRE{#ENV{action}} + <div class="editer-groupe"> + + [(#REM) Nb : attention, bizarrement un name par choix ] + #SET{erreurs_reseaux,#LISTE{#ENV{erreurs/dublincore},#ENV{erreurs/opengraph},#ENV{erreurs/twitter}}|array_filter} + #SET{erreurs_reseaux,#GET{erreurs_reseaux}|implode{', '}} + <div class="editer editer_reseaux[ (#GET{erreurs_reseaux}|oui)erreur]"> + <label><:metasplus:label_reseaux:></label> + <div class="choix"> + [<span class="erreur_message">(#ENV{erreurs/dublincore})</span>] + <input type="checkbox" name="dublincore" id='dublincore' class="checkbox" value="on"[ (#ENV{dublincore}|oui)checked="checked"] /> + <label for="dublincore"><:metasplus:label_dublincore:></label> + </div> + <div class="choix"> + [<span class="erreur_message">(#ENV{erreurs/opengraph})</span>] + <input type="checkbox" name="opengraph" id='opengraph' class="checkbox" value="on"[ (#ENV{opengraph}|oui)checked="checked"] /> + <label for="opengraph"><:metasplus:label_opengraph:></label> + </div> + <div class="choix"> + [<span class="erreur_message">(#ENV{erreurs/twitter})</span>] + <input type="checkbox" name="twitter" id='twitter' class="checkbox" value="on"[ (#ENV{twitter}|oui)checked="checked"] /> + <label for="twitter"><:metasplus:label_twitter:></label> + </div> + </div> + + #SET{name,masquer_auteurs} + #SET{erreurs,#ENV{erreurs/#GET{name}}} + <div class="editer editer_#GET{name}[ (#GET{erreurs}|oui)erreur]"> + <label for="#GET{name}"><:metasplus:label_masquer_auteurs:></label> + <p class="explication"><:metasplus:explication_masquer_auteurs:></p> + [<span class="erreur_message">(#GET{erreurs})</span>] + <div class="choix"> + <input type="checkbox" name="#GET{name}" id="#GET{name}" class="checkbox" value="on"[ (#ENV{#GET{name}}|oui)checked="checked"] /> + <label for="#GET{name}"><:metasplus:label_case_masquer_auteurs:></label> + </div> + </div> + + #SET{name,id_doc_logo} + #SET{erreurs,#ENV{erreurs/#GET{name}}} + <div class="editer editer_id_doc_logo[ (#GET{erreurs}|oui)erreur]"> + <label for="#GET{name}"><:metasplus:logo_bis:></label> + <p class="explication"><:metasplus:explication_id_doc_logo:></p> + <input type="hidden" value="#ENV{#GET{name}}" name="#GET{name}"> + <BOUCLE_doc(DOCUMENTS){id_document=#CONFIG{metasplus/id_doc_logo}}> + [(#LOGO_DOCUMENT|#URL_DOCUMENT)] + [(#AUTORISER{supprimer,document,#ID_DOCUMENT}|oui) + [(#URL_ACTION_AUTEUR{supprimer_document,#ID_DOCUMENT,#SELF}|icone_horizontale{<:medias:bouton_enlever_supprimer_document:>,image,del})] + ] + </BOUCLE_doc> + <input type="file" id="#GET{name}" name="#GET{name}" class="file bigup" /> + <//B_doc> + </div> + + </div> + <p class="boutons"> + <input type="submit" name="_cfg_ok" value="<:bouton_enregistrer:>" class="submit" /> + </p> +</div> +</form> +</div> diff --git a/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ar.php b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ar.php new file mode 100644 index 0000000..faeda13 --- /dev/null +++ b/design_system_dependences/squelettes_par_rubrique/lang/paquet-squelettes_par_rubrique_ar.php @@ -0,0 +1,15 @@ +<?php +// This is a SPIP language file -- Ceci est un fichier langue de SPIP +// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-squelettes_par_rubrique?lang_cible=ar +// ** ne pas modifier le fichier ** + +if (!defined('_ECRIRE_INC_VERSION')) { + return; +} + +$GLOBALS[$GLOBALS['idx_lang']] = array( + + // S + 'squelettes_par_rubrique_description' => 'دعم Ø§Ù„ØµÙØØ§Øª النموذجية التي تملك لاØÙ‚Ø© رقمية Ùˆ/او لاØÙ‚Ø© رمز لغة', + 'squelettes_par_rubrique_slogan' => 'دعم Ø§Ù„ØµÙØØ§Øª النموذجية ذات اللواØÙ‚ ÙÙŠ SPIP' +); -- GitLab