Compare commits

...

No commits in common. 'master' and '3.2' have entirely different histories.
master ... 3.2

  1. 3
      .gitattributes
  2. 6
      base/sites.php
  3. 2
      formulaires/configurer_sites.html
  4. 4
      formulaires/editer_site.html
  5. 2
      formulaires/exporter_sites.html
  6. 2
      formulaires/importer_sites.html
  7. 2
      formulaires/regler_moderation_site.html
  8. 2
      formulaires/site.html
  9. 72
      genie/syndic.php
  10. 570
      inc/syndic.php
  11. 17
      lang/paquet-sites.xml
  12. 15
      lang/paquet-sites_br.php
  13. 15
      lang/paquet-sites_eo.php
  14. 2
      lang/paquet-sites_fr.php
  15. 163
      lang/sites.xml
  16. 5
      lang/sites_ar.php
  17. 50
      lang/sites_br.php
  18. 1
      lang/sites_en.php
  19. 71
      lang/sites_eo.php
  20. 3
      lang/sites_fr.php
  21. 1
      lang/sites_fr_fem.php
  22. 1
      lang/sites_fr_tu.php
  23. 3
      lang/sites_nl.php
  24. 1
      lang/sites_pt_br.php
  25. 8
      paquet.xml
  26. 2
      prive/objets/liste/syndic.html
  27. 1
      prive/squelettes/contenu/controler_syndication.html
  28. 5
      prive/style_prive_plugin_syndic.html
  29. 4
      sites_administrations.php
  30. 16
      sites_autoriser.php
  31. 59
      sites_fonctions.php
  32. 6
      sites_ieconfig.php
  33. 638
      syndic/atomrss.php

3
.gitattributes vendored

@ -29,10 +29,8 @@ inc/site.php -text
inc/syndic.php -text
lang/paquet-sites.xml -text
lang/paquet-sites_ar.php -text
lang/paquet-sites_br.php -text
lang/paquet-sites_de.php -text
lang/paquet-sites_en.php -text
lang/paquet-sites_eo.php -text
lang/paquet-sites_es.php -text
lang/paquet-sites_fa.php -text
lang/paquet-sites_fr_fem.php -text
@ -172,4 +170,3 @@ puce_statut/site.php -text
/sites_fonctions.php -text
/sites_ieconfig.php -text
/sites_pipelines.php -text
syndic/atomrss.php -text

6
base/sites.php

@ -97,7 +97,6 @@ function sites_declarer_tables_objets_sql($tables) {
"KEY id_secteur" => "id_secteur",
"KEY statut" => "statut, date_syndic",
),
'parent' => array('type' => 'rubrique', 'champ' => 'id_rubrique'),
'join' => array(
"id_syndic" => "id_syndic",
"id_rubrique" => "id_rubrique"
@ -153,10 +152,7 @@ function sites_declarer_tables_objets_sql($tables) {
"lang" => "VARCHAR(10) DEFAULT '' NOT NULL",
"url_source" => "TINYTEXT DEFAULT '' NOT NULL",
"source" => "TINYTEXT DEFAULT '' NOT NULL",
"tags" => "TEXT DEFAULT '' NOT NULL",
"raw_data" => "TEXT DEFAULT '' NOT NULL",
"raw_format" => "TINYTEXT DEFAULT '' NOT NULL",
"raw_methode" => "TINYTEXT DEFAULT '' NOT NULL",
"tags" => "TEXT DEFAULT '' NOT NULL"
),
'key' => array(
"PRIMARY KEY" => "id_syndic_article",

2
formulaires/configurer_sites.html

@ -72,7 +72,7 @@
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='btn submit' value='<:bouton_enregistrer:>' /></p>
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

4
formulaires/editer_site.html

@ -28,7 +28,7 @@
<input type="text" name="url_auto" id="url_auto" class='text' size='40' value="[(#ENV{url_site}|sinon{http://})]" />
</div>
</div>
<p class="boutons"><input type='submit' class='btn submit' name='ajoute_url_auto' value='<:bouton_ajouter:>' /></p>
<p class="boutons"><input type='submit' class='submit' name='ajoute_url_auto' value='<:bouton_ajouter:>' /></p>
<p class="explication"><:sites:texte_non_fonction_referencement:></p>
</fieldset>
</div>
@ -85,7 +85,7 @@
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type='submit' class='btn submit' value='<:bouton_enregistrer:>' /></p>
<p class="boutons"><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

2
formulaires/exporter_sites.html

@ -41,7 +41,7 @@
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type='submit' class='btn submit' value='<:sites:bouton_exporter:>' /></p>
<p class="boutons"><input type='submit' class='submit' value='<:sites:bouton_exporter:>' /></p>
</div></form>
]
</div>

2
formulaires/importer_sites.html

@ -49,7 +49,7 @@
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class="boutons"><input type='submit' class='btn submit' value='<:sites:bouton_importer:>' /></p>
<p class="boutons"><input type='submit' class='submit' value='<:sites:bouton_importer:>' /></p>
</div></form>
]
</div>

2
formulaires/regler_moderation_site.html

@ -53,7 +53,7 @@
</div>
[(#REM) ajouter les saisies supplementaires : extra et autre, a cet endroit ]
<!--extra-->
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='btn submit' value='<:bouton_enregistrer:>' /></p>
<p class='boutons'><span class='image_loading'>&nbsp;</span><input type='submit' class='submit' value='<:bouton_enregistrer:>' /></p>
</div></form>
]
</div>

2
formulaires/site.html

@ -30,7 +30,7 @@
<label for="nobot"><:antispam_champ_vide:></label>
<input type="text" class="text" name="nobot" id="nobot" value="#ENV{nobot}" size="10" />
</p>
<p class="boutons"><input type="submit" class="btn submit" value="<:bouton_valider:>" /></p>
<p class="boutons"><input type="submit" class="submit" value="<:bouton_valider:>" /></p>
</form>
]
</div>

72
genie/syndic.php

@ -19,6 +19,7 @@
if (!defined("_ECRIRE_INC_VERSION")) {
return;
}
include_spip('inc/syndic');
## valeurs modifiables dans mes_options
if (!defined('_PERIODE_SYNDICATION')) {
@ -105,28 +106,28 @@ function syndic_a_jour($now_id_syndic) {
_LOG_ERREUR);
}
$site = sql_fetsel("*", "spip_syndic", "id_syndic=" . intval($now_id_syndic));
$row = sql_fetsel("*", "spip_syndic", "id_syndic=" . intval($now_id_syndic));
if (!$site) {
if (!$row) {
return;
}
$url_syndic = $site['url_syndic'];
$url_site = $site['url_site'];
$url_syndic = $row['url_syndic'];
$url_site = $row['url_site'];
if ($site['moderation'] == 'oui') {
$statut_article = 'dispo';
if ($row['moderation'] == 'oui') {
$moderation = 'dispo';
} // a valider
else {
$statut_article = 'publie';
$moderation = 'publie';
} // en ligne sans validation
// determiner le statut a poser en cas d'echec : sus par defaut
// off si le site est deja off, ou sus depuis trop longtemps
$statut = 'sus';
if (
$site['statut'] == 'off'
or ($site['statut'] == 'sus' and time() - strtotime($site['date_syndic']) > _PERIODE_SYNDICATION_SUSPENDUE * 60)
$row['statut'] == 'off'
or ($row['statut'] == 'sus' and time() - strtotime($row['date_syndic']) > _PERIODE_SYNDICATION_SUSPENDUE * 60)
) {
$statut = 'off';
}
@ -134,43 +135,39 @@ function syndic_a_jour($now_id_syndic) {
sql_updateq('spip_syndic', array('syndication' => $statut, 'date_syndic' => date('Y-m-d H:i:s')),
"id_syndic=" . intval($now_id_syndic));
$methode_syndication = 'atomrss';
if (preg_match(',^(\w+:)\w+://,', $url_syndic, $m)) {
$methode_syndication = rtrim($m[1], ':');
$url_syndic = substr($url_syndic, strlen($m[1]));
}
if (!$syndic = charger_fonction($methode_syndication, 'syndic', true)) {
spip_log("methode syndication $methode_syndication inconnue pour $url_syndic", 'sites' . _LOG_ERREUR);
return _T('sites:erreur_methode_syndication_inconnue', array('methode' => $methode_syndication));
// Aller chercher les donnees du RSS et les analyser
include_spip('inc/distant');
$rss = recuperer_page($url_syndic, true);
if (!$rss) {
$articles = _T('sites:avis_echec_syndication_02');
} else {
$articles = analyser_backend($rss, $url_syndic);
}
$items = $syndic($url_syndic);
// Renvoyer l'erreur le cas echeant
if (!is_array($items)) {
return $items;
if (!is_array($articles)) {
return $articles;
}
// Les enregistrer dans la base
$faits = array();
foreach ($items as $item) {
inserer_article_syndique($item, $now_id_syndic, $statut_article, $url_site, $url_syndic, $site['resume'], $faits, $methode_syndication);
foreach ($articles as $data) {
inserer_article_syndique($data, $now_id_syndic, $moderation, $url_site, $url_syndic, $row['resume'], $faits);
}
// moderation automatique des liens qui sont sortis du feed
if (count($faits) > 0) {
$not_faits = sql_in("id_syndic_article", $faits, 'NOT');
if ($site['miroir'] == 'oui') {
$faits = sql_in("id_syndic_article", $faits, 'NOT');
if ($row['miroir'] == 'oui') {
sql_update('spip_syndic_articles', array('statut' => "'off'", 'maj' => 'maj'),
"id_syndic=".intval($now_id_syndic). " AND $not_faits");
"id_syndic=$now_id_syndic AND $faits");
}
// suppression apres 2 mois des liens qui sont sortis du feed
if ($site['oubli'] == 'oui') {
if ($row['oubli'] == 'oui') {
sql_delete('spip_syndic_articles', 'id_syndic='.intval($now_id_syndic) . ' AND NOT(' . sql_date_proche('maj', -2,
'MONTH') . ') AND NOT(' . sql_date_proche('date', -2, 'MONTH') . ") AND $not_faits");
sql_delete('spip_syndic_articles', "id_syndic=$now_id_syndic AND NOT(" . sql_date_proche('maj', -2,
'MONTH') . ') AND NOT(' . sql_date_proche('date', -2, 'MONTH') . ") AND $faits");
}
}
@ -198,11 +195,10 @@ function syndic_a_jour($now_id_syndic) {
* @param string $url_syndic
* @param string $resume
* @param array $faits
* @param string $methode_syndication
* @return bool
* true si l'article est nouveau, false sinon.
**/
function inserer_article_syndique($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, &$faits, $methode_syndication = '') {
function inserer_article_syndique($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, &$faits) {
// Creer le lien s'il est nouveau - cle=(id_syndic,url)
$le_lien = $data['url'];
@ -345,18 +341,6 @@ function inserer_article_syndique($data, $now_id_syndic, $statut, $url_site, $ur
'tags' => $tags
);
// donnees brutes completes si fournies par la methode de syndication
if (isset($data['raw_data'])) {
$vals['raw_data'] = $data['raw_data'];
if (isset($data['raw_format'])) {
$vals['raw_format'] = $data['raw_format'];
}
if (!isset($data['raw_methode'])) {
$data['raw_methode'] = $methode_syndication;
}
$vals['raw_methode'] = $data['raw_methode'];
}
// Mettre a jour la date si lastbuilddate
if (isset($data['lastbuilddate']) and $data['lastbuilddate']) {
$vals['date'] = date("Y-m-d H:i:s", $data['lastbuilddate']);

570
inc/syndic.php

@ -26,5 +26,573 @@ if (!defined("_ECRIRE_INC_VERSION")) {
// il faut passer par cron() pour avoir un verrou portable
// Voir un exemple dans action/editer/site
include_spip('genie/syndic');
include_spip('syndic/atomrss');
/**
* Analyse un texte de backend
*
* @param string $rss
* Texte du fichier de backend
* @param string $url_syndic
* URL du site d'où à été extrait le texte
* @return array|string
* - array : tableau des items lus,
* - string : texte d'erreur
**/
function analyser_backend($rss, $url_syndic = '') {
include_spip('inc/texte'); # pour couper()
$rss = pipeline('pre_syndication', $rss);
if (!defined('_SYNDICATION_DEREFERENCER_URL')) {
/** si true, les URLs de type feedburner sont déréférencées */
define('_SYNDICATION_DEREFERENCER_URL', false);
}
// Echapper les CDATA
cdata_echappe($rss, $echappe_cdata);
// supprimer les commentaires
$rss = preg_replace(',<!--.*-->,Ums', '', $rss);
// simplifier le backend, en supprimant les espaces de nommage type "dc:"
$rss = preg_replace(',<(/?)(dc):,i', '<\1', $rss);
// chercher auteur/lang dans le fil au cas ou les items n'en auraient pas
list($header) = preg_split(',<(item|entry)\b,', $rss, 2);
if (preg_match_all(
',<(author|creator)\b(.*)</\1>,Uims',
$header, $regs, PREG_SET_ORDER)) {
$les_auteurs_du_site = array();
foreach ($regs as $reg) {
$nom = $reg[2];
if (preg_match(',<name>(.*)</name>,Uims', $nom, $reg)) {
$nom = $reg[1];
}
$les_auteurs_du_site[] = trim(textebrut(filtrer_entites($nom)));
}
$les_auteurs_du_site = join(', ', array_unique($les_auteurs_du_site));
} else {
$les_auteurs_du_site = '';
}
$langue_du_site = '';
if ((preg_match(',<([^>]*xml:)?lang(uage)?' . '>([^<>]+)<,i',
$header, $match) and $l = $match[3])
or ($l = extraire_attribut(extraire_balise($header, 'feed'), 'xml:lang'))
) {
$langue_du_site = $l;
} // atom
elseif (preg_match(',<feed\s[^>]*xml:lang=[\'"]([^<>\'"]+)[\'"],i', $header, $match)) {
$langue_du_site = $match[1];
}
// Recuperer les blocs item et entry
$items = array_merge(extraire_balises($rss, 'item'), extraire_balises($rss, 'entry'));
//
// Analyser chaque <item>...</item> du backend et le transformer en tableau
//
if (!count($items)) {
return _T('sites:avis_echec_syndication_01');
}
if (!defined('_SYNDICATION_MAX_ITEMS')) define('_SYNDICATION_MAX_ITEMS',1000);
$nb_items = 0;
foreach ($items as $item) {
$data = array();
if ($nb_items++>_SYNDICATION_MAX_ITEMS){
break;
}
// URL (semi-obligatoire, sert de cle)
// guid n'est un URL que si marque de <guid ispermalink="true"> ;
// attention la valeur par defaut est 'true' ce qui oblige a quelque
// gymnastique
if (preg_match(',<guid.*>[[:space:]]*(https?:[^<]*)</guid>,Uims',
$item, $regs) and preg_match(',^(true|1)?$,i',
extraire_attribut($regs[0], 'ispermalink'))
) {
$data['url'] = $regs[1];
} // contourner les redirections feedburner
else {
if (_SYNDICATION_DEREFERENCER_URL
and preg_match(',<feedburner:origLink>(.*)<,Uims',
$item, $regs)
) {
$data['url'] = $regs[1];
} // <link>, plus classique
else {
if (preg_match(
',<link[^>]*[[:space:]]rel=["\']?alternate[^>]*>(.*)</link>,Uims',
$item, $regs)) {
$data['url'] = $regs[1];
} else {
if (preg_match(',<link[^>]*[[:space:]]rel=.alternate[^>]*>,Uims',
$item, $regs)) {
$data['url'] = extraire_attribut($regs[0], 'href');
} else {
if (preg_match(',<link[^>]*>\s*([^\s]+)\s*</link>,Uims', $item, $regs)) {
$data['url'] = $regs[1];
} else {
if (preg_match(',<link[^>]*>,Uims', $item, $regs)) {
$data['url'] = extraire_attribut($regs[0], 'href');
} // Aucun link ni guid, mais une enclosure
else {
if (preg_match(',<enclosure[^>]*>,ims', $item, $regs)
and $url = extraire_attribut($regs[0], 'url')
) {
$data['url'] = $url;
} // pas d'url, c'est genre un compteur...
else {
$data['url'] = '';
}
}
}
}
}
}
}
// Titre (semi-obligatoire)
if (preg_match(",<title[^>]*>(.*?)</title>,ims", $item, $match)) {
$data['titre'] = $match[1];
} else {
if (preg_match(',<link[[:space:]][^>]*>,Uims', $item, $mat)
and $title = extraire_attribut($mat[0], 'title')
) {
$data['titre'] = $title;
}
}
if (!strlen($data['titre'] = trim($data['titre']))) {
$data['titre'] = _T('ecrire:info_sans_titre');
}
// Date
$la_date = '';
if (preg_match(',<(published|modified|issued)>([^<]*)<,Uims',
$item, $match)) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date and
preg_match(',<(pubdate)>([^<]*)<,Uims', $item, $match)
) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date and
preg_match(',<([a-z]+:date)>([^<]*)<,Uims', $item, $match)
) {
cdata_echappe_retour($match[2], $echappe_cdata);
$la_date = my_strtotime($match[2], $langue_du_site);
}
if (!$la_date and
preg_match(',<date>([^<]*)<,Uims', $item, $match)
) {
cdata_echappe_retour($match[1], $echappe_cdata);
$la_date = my_strtotime($match[1], $langue_du_site);
}
// controle de validite de la date
// pour eviter qu'un backend errone passe toujours devant
// (note: ca pourrait etre defini site par site, mais ca risque d'etre
// plus lourd que vraiment utile)
if ($GLOBALS['controler_dates_rss']) {
if (!$la_date
or $la_date > time() + 48 * 3600
) {
$la_date = time();
}
}
if ($la_date) {
$data['date'] = $la_date;
}
// Honorer le <lastbuilddate> en forcant la date
if (preg_match(',<(lastbuilddate|updated|modified)>([^<>]+)</\1>,i',
$item, $regs)
and $lastbuilddate = my_strtotime(trim($regs[2]), $langue_du_site)
// pas dans le futur
and $lastbuilddate < time()
) {
$data['lastbuilddate'] = $lastbuilddate;
}
// Auteur(s)
if (preg_match_all(
',<(author|creator)\b[^>]*>(.*)</\1>,Uims',
$item, $regs, PREG_SET_ORDER)) {
$auteurs = array();
foreach ($regs as $reg) {
$nom = $reg[2];
if (preg_match(',<name\b[^>]*>(.*)</name>,Uims', $nom, $reg)) {
$nom = $reg[1];
}
// Cas particulier d'un auteur Flickr
if (preg_match(',nobody@flickr.com \((.*)\),Uims', $nom, $reg)) {
$nom = $reg[1];
}
$auteurs[] = trim(textebrut(filtrer_entites($nom)));
}
$data['lesauteurs'] = join(', ', array_unique($auteurs));
} else {
$data['lesauteurs'] = $les_auteurs_du_site;
}
// Description
if (preg_match(',<(description|summary)\b.*'
. '>(.*)</\1\b,Uims', $item, $match)) {
$data['descriptif'] = trim($match[2]);
}
if (preg_match(',<(content)\b.*'
. '>(.*)</\1\b,Uims', $item, $match)) {
$data['content'] = trim($match[2]);
}
// lang
if (preg_match(',<([^>]*xml:)?lang(uage)?' . '>([^<>]+)<,i',
$item, $match)) {
$data['lang'] = trim($match[3]);
} else {
if ($lang = trim(extraire_attribut($item, 'xml:lang'))) {
$data['lang'] = $lang;
} else {
$data['lang'] = trim($langue_du_site);
}
}
// source et url_source (pas trouve d'exemple en ligne !!)
# <source url="http://www.truc.net/music/uatsap.mp3" length="19917" />
# <source url="http://www.truc.net/rss">Site source</source>
if (preg_match(',(<source[^>]*>)(([^<>]+)</source>)?,i',
$item, $match)) {
$data['source'] = trim($match[3]);
$data['url_source'] = str_replace('&amp;', '&',
trim(extraire_attribut($match[1], 'url')));
}
// GitHub : Identification du commit
if (preg_match(',<id>[^/]+/(\w+)</id>,Uims', $item, $regs)) {
$data['id_commit'] = $regs[1];
}
// tags
# a partir de "<dc:subject>", (del.icio.us)
# ou <media:category> (flickr)
# ou <itunes:category> (apple)
# on cree nos tags microformat <a rel="directory" href="url">titre</a>
# http://microformats.org/wiki/rel-directory-fr
$tags = array();
if (preg_match_all(
',<(([a-z]+:)?(subject|category|directory|keywords?|tags?|type))[^>]*>'
. '(.*?)</\1>,ims',
$item, $matches, PREG_SET_ORDER)) {
$tags = ajouter_tags($matches, $item);
} # array()
elseif (preg_match_all(
',<(([a-z]+:)?(subject|category|directory|keywords?|tags?|type))[^>]*/>'
. ',ims',
$item, $matches, PREG_SET_ORDER)) {
$tags = ajouter_tags($matches, $item);
} # array()
// Pieces jointes :
// chercher <enclosure> au format RSS et les passer en microformat
// ou des microformats relEnclosure,
// ou encore les media:content
if (!afficher_enclosures(join(', ', $tags))) {
// on prend toutes les pièces jointes possibles, et on essaie de les rendre uniques.
$enclosures = array();
# rss 2
if (preg_match_all(',<enclosure[[:space:]][^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
# atom
if (preg_match_all(',<link\b[^<>]+rel=["\']?enclosure["\']?[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
# media rss
if (preg_match_all(',<media:content\b[^<>]+>,i',
$item, $matches, PREG_PATTERN_ORDER)) {
$enclosures += array_map('enclosure2microformat', $matches[0]);
}
$data['enclosures'] = join(', ', array_unique($enclosures));
unset($enclosures);
}
$data['item'] = $item;
// Nettoyer les donnees et remettre les CDATA en place
cdata_echappe_retour($data, $echappe_cdata);
cdata_echappe_retour($tags, $echappe_cdata);
// passer l'url en absolue
$data['url'] = url_absolue(filtrer_entites($data['url']), $url_syndic);
// si on demande un dereferencement de l'URL, il faut verifier que ce n'est pas une redirection
if (_SYNDICATION_DEREFERENCER_URL) {
$target = $data['url'];
include_spip("inc/distant");
for ($i = 0; $i < 10; $i++) {
// on fait un GET et pas un HEAD car les vieux SPIP ne repondent pas la redirection avec un HEAD (honte) sur un article virtuel
$res = recuperer_lapage($target, false, "GET", 4096);
if (!$res) {
break;
} // c'est pas bon signe car on a pas trouve l'URL...
if (is_array($res)) {
break;
} // on a trouve la page, donc on a l'URL finale
$target = $res; // c'est une redirection, on la suit pour voir ou elle mene
}
// ici $target est l'URL finale de la page
$data['url'] = $target;
}
// Trouver les microformats (ecrase les <category> et <dc:subject>)
if (preg_match_all(
',<a[[:space:]]([^>]+[[:space:]])?rel=[^>]+>.*</a>,Uims',
$data['item'], $regs, PREG_PATTERN_ORDER)) {
$tags = $regs[0];
}
// Cas particulier : tags Connotea sous la forme <a class="postedtag">
if (preg_match_all(
',<a[[:space:]][^>]+ class="postedtag"[^>]*>.*</a>,Uims',
$data['item'], $regs, PREG_PATTERN_ORDER)) {
$tags = preg_replace(', class="postedtag",i',
' rel="tag"', $regs[0]);
}
$data['tags'] = $tags;
// enlever le html des titre pour etre homogene avec les autres objets spip
$data['titre'] = textebrut($data['titre']);
$articles[] = $data;
}
return $articles;
}
/**
* Strtotime même avec le format W3C !
*
* Car hélàs, strtotime ne le reconnait pas tout seul !
*
* @link http://www.w3.org/TR/NOTE-datetime Format datetime du W3C
*
* @param string $la_date
* Date à parser
* @return int
* Timestamp
**/
function my_strtotime($la_date, $lang = null) {
// format complet
if (preg_match(
',^(\d+-\d+-\d+[T ]\d+:\d+(:\d+)?)(\.\d+)?'
. '(Z|([-+]\d{2}):\d+)?$,',
$la_date, $match)) {
$match = array_pad($match, 6, null);
$la_date = str_replace("T", " ", $match[1]) . " GMT";
return strtotime($la_date) - intval($match[5]) * 3600;
}
// YYYY
if (preg_match(',^\d{4}$,', $la_date, $match)) {
return strtotime($match[0] . "-01-01");
}
// YYYY-MM
if (preg_match(',^\d{4}-\d{2}$,', $la_date, $match)) {
return strtotime($match[0] . "-01");
}
// YYYY-MM-DD hh:mm:ss
if (preg_match(',^\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\b,', $la_date, $match)) {
return strtotime($match[0]);
}
// utiliser strtotime en dernier ressort
// en nettoyant le jour qui prefixe parfois la date, suivi d'une virgule
// et les UT qui sont en fait des UTC
$la_date_c = preg_replace("/^\w+,\s*/ms", "", $la_date);
$la_date_c = preg_replace("/UT\s*$/ms", "UTC", $la_date_c);
if ($s = strtotime($la_date)
or $s = strtotime($la_date_c)
) {
return $s;
}
// essayons de voir si le nom du mois est dans la langue du flux et remplacons le
// par la version anglaise avant de faire strtotime
if ($lang) {
// "fr-fr"
list($lang) = explode("-", $lang);
static $months = null;
if (!isset($months[$lang])) {
$prev_lang = $GLOBALS['spip_lang'];
changer_langue($lang);
foreach (range(1, 12) as $m) {
$s = _T("date_mois_$m");
$months[$lang][$s] = date("M", strtotime("2013-$m-01"));
$s = _T("date_mois_" . $m . "_abbr");
$months[$lang][$s] = date("M", strtotime("2013-$m-01"));
$months[$lang][trim($s, ".")] = date("M", strtotime("2013-$m-01"));
}
changer_langue($prev_lang);
}
spip_log($la_date_c, "dbgs");
foreach ($months[$lang] as $loc => $en) {
if (stripos($la_date_c, $loc) !== false) {
$s = str_ireplace($loc, $en, $la_date_c);
if ($s = strtotime($s)) {
return $s;
}
}
}
}
// erreur
spip_log("Impossible de lire le format de date '$la_date'");
return false;
}
// A partir d'un <dc:subject> ou autre essayer de recuperer
// le mot et son url ; on cree <a href="url" rel="tag">mot</a>
// https://code.spip.net/@creer_tag
function creer_tag($mot, $type, $url) {
if (!strlen($mot = trim($mot))) {
return '';
}
$mot = "<a rel=\"tag\">$mot</a>";
if ($url) {
$mot = inserer_attribut($mot, 'href', $url);
}
if ($type) {
$mot = inserer_attribut($mot, 'rel', $type);
}
return $mot;
}
// https://code.spip.net/@ajouter_tags
function ajouter_tags($matches, $item) {
include_spip('inc/filtres');
$tags = array();
foreach ($matches as $match) {
$type = ($match[3] == 'category' or $match[3] == 'directory')
? 'directory' : 'tag';
$mot = supprimer_tags($match[0]);
if (!strlen($mot)
and !strlen($mot = extraire_attribut($match[0], 'label'))
) {
break;
}
// rechercher un url
if ($url = extraire_attribut($match[0], 'domain')) {
// category@domain est la racine d'une url qui se prolonge
// avec le contenu text du tag <category> ; mais dans SPIP < 2.0
// on donnait category@domain = #URL_RUBRIQUE, et
// text = #TITRE_RUBRIQUE ; d'ou l'heuristique suivante sur le slash
if (substr($url, -1) == '/') {
$url .= rawurlencode($mot);
}
} else {
if ($url = extraire_attribut($match[0], 'resource')
or $url = extraire_attribut($match[0], 'url')
) {
} ## cas particuliers
else {
if (extraire_attribut($match[0], 'scheme') == 'urn:flickr:tags') {
foreach (explode(' ', $mot) as $petit) {
if ($t = creer_tag($petit, $type,
'http://www.flickr.com/photos/tags/' . rawurlencode($petit) . '/')
) {
$tags[] = $t;
}
}
$mot = '';
} else {
if (
// cas atom1, a faire apres flickr
$term = extraire_attribut($match[0], 'term')
) {
if ($scheme = extraire_attribut($match[0], 'scheme')) {
$url = suivre_lien($scheme, $term);
} else {
$url = $term;
}
} else {
# type delicious.com
foreach (explode(' ', $mot) as $petit) {
if (preg_match(',<rdf\b[^>]*\bresource=["\']([^>]*/'
. preg_quote(rawurlencode($petit), ',') . ')["\'],i',
$item, $m)) {
$mot = '';
if ($t = creer_tag($petit, $type, $m[1])) {
$tags[] = $t;
}
}
}
}
}
}
}
if ($t = creer_tag($mot, $type, $url)) {
$tags[] = $t;
}
}
return $tags;
}
// Lit contenu des blocs [[CDATA]] dans un flux
// https://code.spip.net/@cdata_echappe_retour
function cdata_echappe(&$rss, &$echappe_cdata) {
$echappe_cdata = array();
if (preg_match_all(',<!\[CDATA\[(.*)]]>,Uims', $rss,
$regs, PREG_SET_ORDER)) {
foreach ($regs as $n => $reg) {
if (strpos($reg[1],'<')!==false
or strpos($reg[1],'>')!==false) {
// verifier que la chaine est encore dans le flux, car on peut avoir X fois la meme
// inutile de (sur)peupler le tableau avec des substitutions identiques
if (strpos($rss,$reg[0])!==false){
$echappe_cdata["@@@SPIP_CDATA$n@@@"] = $reg[1];
$rss = str_replace($reg[0], "@@@SPIP_CDATA$n@@@", $rss);
}
} else {
$rss = str_replace($reg[0], $reg[1], $rss);
}
}
}
}
// Retablit le contenu des blocs [[CDATA]] dans une chaine ou un tableau
// https://code.spip.net/@cdata_echappe_retour
function cdata_echappe_retour(&$x, &$echappe_cdata) {
if (is_string($x)) {
if (strpos($x, '&lt;') !== false){
$x = filtrer_entites($x);
}
if (strpos($x, '@@@SPIP_CDATA') !== false){
$x = str_replace( array_keys($echappe_cdata), array_values($echappe_cdata), $x);
}
} else {
if (is_array($x)) {
foreach ($x as $k => &$v) {
cdata_echappe_retour($v, $echappe_cdata);
}
}
}
}

17
lang/paquet-sites.xml

@ -1,32 +1,21 @@
<traduction
module="paquet-sites"
id="paquet-sites--sites-bd738"
gestionnaire="salvatore"
url="https://trad.spip.net"
source="https://git.spip.net/spip/sites.git"
reference="fr">
<traduction module="paquet-sites" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_core_/plugins/sites/lang/" reference="fr">
<langue code="ar" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=ar" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
</langue>
<langue code="br" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=br" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="nonobreizh" lien="https://trad.spip.net/auteur/nonobreizh" />
</langue>
<langue code="de" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=de" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
</langue>
<langue code="en" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=en" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
</langue>
<langue code="eo" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=eo" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="gpl" lien="https://trad.spip.net/auteur/gpl" />
</langue>
<langue code="es" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=es" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="jotacese" lien="https://trad.spip.net/auteur/jotacese" />
</langue>
<langue code="fa" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fa" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
</langue>
<langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00" />
<langue code="fr" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
</langue>
<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=fr_fem" total="2" traduits="2" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="denisb" lien="https://trad.spip.net/auteur/denisb" />
</langue>

15
lang/paquet-sites_br.php

@ -1,15 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=br
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Lec’hioù ha sindikadur e SPIP (prevez ha publik)',
'sites_slogan' => 'Merañ al lec’hioù ha sindikadur e SPIP'
);

15
lang/paquet-sites_eo.php

@ -1,15 +0,0 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// extrait automatiquement de https://trad.spip.net/tradlang_module/paquet-sites?lang_cible=eo
// ** ne pas modifier le fichier **
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$GLOBALS[$GLOBALS['idx_lang']] = array(
// S
'sites_description' => 'Retejoj kaj abonrilato en SPIP (privata kaj publika)',
'sites_slogan' => 'Mastrumado de retejoj kaj de abonrilato en SPIP'
);

2
lang/paquet-sites_fr.php

@ -1,6 +1,6 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Fichier source, a modifier dans https://git.spip.net/spip/sites.git
// Fichier source, a modifier dans svn://zone.spip.org/spip-zone/_core_/plugins/sites/lang/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}

163
lang/sites.xml

@ -1,135 +1,156 @@
<traduction
module="sites"
id="sites--sites-bd738"
gestionnaire="salvatore"
url="https://trad.spip.net"
source="https://git.spip.net/spip/sites.git"
reference="fr">
<langue code="ar" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ar" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traduction module="sites" gestionnaire="salvatore" url="https://trad.spip.net" source="svn://zone.spip.org/spip-zone/_core_/plugins/sites/lang/" reference="fr">
<langue code="ar" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ar" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
</langue>
<langue code="ast" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ast" total="123" traduits="73" relire="0" modifs="8" nouveaux="42" pourcent="59.35">
<langue code="ast" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ast" total="122" traduits="73" relire="0" modifs="8" nouveaux="41" pourcent="59.84">
<traducteur nom="Xuacu" lien="https://trad.spip.net/auteur/xuacu" />
</langue>
<langue code="ay" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ay" total="123" traduits="28" relire="0" modifs="2" nouveaux="93" pourcent="22.76" />
<langue code="bg" url="https://trad.spip.net/tradlang_module/sites?lang_cible=bg" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="br" url="https://trad.spip.net/tradlang_module/sites?lang_cible=br" total="123" traduits="114" relire="1" modifs="3" nouveaux="5" pourcent="92.68">
<langue code="ay" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ay" total="122" traduits="28" relire="0" modifs="2" nouveaux="92" pourcent="22.95">
</langue>
<langue code="bg" url="https://trad.spip.net/tradlang_module/sites?lang_cible=bg" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="br" url="https://trad.spip.net/tradlang_module/sites?lang_cible=br" total="122" traduits="92" relire="3" modifs="3" nouveaux="24" pourcent="75.41">
<traducteur nom="AudeB" lien="https://trad.spip.net/auteur/audeb" />
<traducteur nom="Kristen" lien="https://trad.spip.net/auteur/kristen" />
<traducteur nom="nonobreizh" lien="https://trad.spip.net/auteur/nonobreizh" />
</langue>
<langue code="bs" url="https://trad.spip.net/tradlang_module/sites?lang_cible=bs" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="ca" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ca" total="123" traduits="73" relire="0" modifs="8" nouveaux="42" pourcent="59.35">
<langue code="bs" url="https://trad.spip.net/tradlang_module/sites?lang_cible=bs" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="ca" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ca" total="122" traduits="73" relire="0" modifs="8" nouveaux="41" pourcent="59.84">
<traducteur nom="merce" lien="https://trad.spip.net/auteur/merce" />
</langue>
<langue code="co" url="https://trad.spip.net/tradlang_module/sites?lang_cible=co" total="123" traduits="70" relire="0" modifs="8" nouveaux="45" pourcent="56.91">
<langue code="co" url="https://trad.spip.net/tradlang_module/sites?lang_cible=co" total="122" traduits="70" relire="0" modifs="8" nouveaux="44" pourcent="57.38">
<traducteur nom="tavamig" lien="https://trad.spip.net/auteur/tavamig" />
</langue>
<langue code="cpf" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cpf" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="cpf_hat" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cpf_hat" total="123" traduits="63" relire="0" modifs="9" nouveaux="51" pourcent="51.22" />
<langue code="cs" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cs" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="da" url="https://trad.spip.net/tradlang_module/sites?lang_cible=da" total="123" traduits="56" relire="0" modifs="9" nouveaux="58" pourcent="45.53" />
<langue code="de" url="https://trad.spip.net/tradlang_module/sites?lang_cible=de" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="cpf" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cpf" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="cpf_hat" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cpf_hat" total="122" traduits="63" relire="0" modifs="9" nouveaux="50" pourcent="51.64">
</langue>
<langue code="cs" url="https://trad.spip.net/tradlang_module/sites?lang_cible=cs" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="da" url="https://trad.spip.net/tradlang_module/sites?lang_cible=da" total="122" traduits="56" relire="0" modifs="9" nouveaux="57" pourcent="45.90">
</langue>
<langue code="de" url="https://trad.spip.net/tradlang_module/sites?lang_cible=de" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="klaus++" lien="https://trad.spip.net/auteur/klaus" />
</langue>
<langue code="en" url="https://trad.spip.net/tradlang_module/sites?lang_cible=en" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<langue code="en" url="https://trad.spip.net/tradlang_module/sites?lang_cible=en" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="b_b" lien="https://trad.spip.net/auteur/b_b" />
<traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
<traducteur nom="George" lien="https://trad.spip.net/auteur/جورج-قندلفت" />
<traducteur nom="kent1" lien="https://trad.spip.net/auteur/kent1" />
<traducteur nom="sQuonk" lien="https://trad.spip.net/auteur/squonk" />
</langue>
<langue code="en_hx" url="https://trad.spip.net/tradlang_module/sites?lang_cible=en_hx" total="123" traduits="55" relire="0" modifs="10" nouveaux="58" pourcent="44.72" />
<langue code="eo" url="https://trad.spip.net/tradlang_module/sites?lang_cible=eo" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="gpl" lien="https://trad.spip.net/auteur/gpl" />
<langue code="en_hx" url="https://trad.spip.net/tradlang_module/sites?lang_cible=en_hx" total="122" traduits="55" relire="0" modifs="10" nouveaux="57" pourcent="45.08">
</langue>
<langue code="eo" url="https://trad.spip.net/tradlang_module/sites?lang_cible=eo" total="122" traduits="72" relire="0" modifs="8" nouveaux="42" pourcent="59.02">
<traducteur nom="Matthieu Marcillaud" lien="https://trad.spip.net/auteur/matthieu-marcillaud" />
</langue>
<langue code="es" url="https://trad.spip.net/tradlang_module/sites?lang_cible=es" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="es" url="https://trad.spip.net/tradlang_module/sites?lang_cible=es" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="dani" lien="https://trad.spip.net/auteur/dani" />
<traducteur nom="Raquel S. Bujaldón" lien="https://trad.spip.net/auteur/raquel-s-bujaldon" />
</langue>
<langue code="eu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=eu" total="123" traduits="73" relire="0" modifs="7" nouveaux="43" pourcent="59.35">
<langue code="eu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=eu" total="122" traduits="73" relire="0" modifs="7" nouveaux="42" pourcent="59.84">
<traducteur nom="otalazt" lien="https://trad.spip.net/auteur/otalazt" />
</langue>
<langue code="fa" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fa" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="fa" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fa" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Davood Hossein" lien="https://trad.spip.net/auteur/davood-hossein" />
</langue>
<langue code="fi" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fi" total="123" traduits="33" relire="0" modifs="8" nouveaux="82" pourcent="26.83" />
<langue code="fon" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fon" total="123" traduits="56" relire="0" modifs="9" nouveaux="58" pourcent="45.53" />
<langue code="fr" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00" />
<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr_fem" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="b_b" lien="https://trad.spip.net/auteur/b_b" />
<langue code="fi" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fi" total="122" traduits="33" relire="0" modifs="8" nouveaux="81" pourcent="27.05">
</langue>
<langue code="fon" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fon" total="122" traduits="56" relire="0" modifs="9" nouveaux="57" pourcent="45.90">
</langue>
<langue code="fr" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
</langue>
<langue code="fr_fem" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr_fem" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="denisb" lien="https://trad.spip.net/auteur/denisb" />
<traducteur nom="touti" lien="https://trad.spip.net/auteur/touti" />
</langue>
<langue code="fr_tu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr_tu" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<langue code="fr_tu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=fr_tu" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="beatnick" lien="https://trad.spip.net/auteur/beatnick" />
<traducteur nom="RealET" lien="https://trad.spip.net/auteur/realet" />
</langue>
<langue code="gl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=gl" total="123" traduits="73" relire="0" modifs="8" nouveaux="42" pourcent="59.35" />
<langue code="hac" url="https://trad.spip.net/tradlang_module/sites?lang_cible=hac" total="123" traduits="14" relire="0" modifs="0" nouveaux="109" pourcent="11.38">
<traducteur nom="Aku Marani" lien="https://trad.spip.net/auteur/akomarani" />
<langue code="gl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=gl" total="122" traduits="73" relire="0" modifs="8" nouveaux="41" pourcent="59.84">
</langue>
<langue code="hac" url="https://trad.spip.net/tradlang_module/sites?lang_cible=hac" total="122" traduits="14" relire="0" modifs="0" nouveaux="108" pourcent="11.48">
<traducteur nom="akomarani" lien="https://trad.spip.net/auteur/akomarani" />
</langue>
<langue code="he" url="https://trad.spip.net/tradlang_module/sites?lang_cible=he" total="122" traduits="36" relire="0" modifs="4" nouveaux="82" pourcent="29.51">
</langue>
<langue code="hu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=hu" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="id" url="https://trad.spip.net/tradlang_module/sites?lang_cible=id" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="he" url="https://trad.spip.net/tradlang_module/sites?lang_cible=he" total="123" traduits="36" relire="0" modifs="4" nouveaux="83" pourcent="29.27" />
<langue code="hu" url="https://trad.spip.net/tradlang_module/sites?lang_cible=hu" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="id" url="https://trad.spip.net/tradlang_module/sites?lang_cible=id" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="is" url="https://trad.spip.net/tradlang_module/sites?lang_cible=is" total="123" traduits="3" relire="0" modifs="0" nouveaux="120" pourcent="2.44" />
<langue code="it" url="https://trad.spip.net/tradlang_module/sites?lang_cible=it" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="is" url="https://trad.spip.net/tradlang_module/sites?lang_cible=is" total="122" traduits="3" relire="0" modifs="0" nouveaux="119" pourcent="2.46">
</langue>
<langue code="it" url="https://trad.spip.net/tradlang_module/sites?lang_cible=it" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="phante" lien="https://trad.spip.net/auteur/phante" />
</langue>
<langue code="it_fem" url="https://trad.spip.net/tradlang_module/sites?lang_cible=it_fem" total="123" traduits="68" relire="0" modifs="8" nouveaux="47" pourcent="55.28" />
<langue code="ja" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ja" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="km" url="https://trad.spip.net/tradlang_module/sites?lang_cible=km" total="123" traduits="67" relire="0" modifs="8" nouveaux="48" pourcent="54.47" />
<langue code="lb" url="https://trad.spip.net/tradlang_module/sites?lang_cible=lb" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="it_fem" url="https://trad.spip.net/tradlang_module/sites?lang_cible=it_fem" total="122" traduits="68" relire="0" modifs="8" nouveaux="46" pourcent="55.74">
</langue>
<langue code="ja" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ja" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="km" url="https://trad.spip.net/tradlang_module/sites?lang_cible=km" total="122" traduits="67" relire="0" modifs="8" nouveaux="47" pourcent="54.92">
</langue>
<langue code="lb" url="https://trad.spip.net/tradlang_module/sites?lang_cible=lb" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Jim Wanderscheid" lien="https://trad.spip.net/auteur/jwander" />
</langue>
<langue code="my" url="https://trad.spip.net/tradlang_module/sites?lang_cible=my" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="nl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=nl" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<langue code="my" url="https://trad.spip.net/tradlang_module/sites?lang_cible=my" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="nl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=nl" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="gerbrand" lien="https://trad.spip.net/auteur/gerbrand" />
<traducteur nom="Hanjo" lien="https://trad.spip.net/auteur/hanjo" />
<traducteur nom="mpossoz" lien="https://trad.spip.net/auteur/mpossoz" />
<traducteur nom="Suske" lien="https://trad.spip.net/auteur/suske" />
</langue>
<langue code="no" url="https://trad.spip.net/tradlang_module/sites?lang_cible=no" total="123" traduits="3" relire="0" modifs="0" nouveaux="120" pourcent="2.44" />
<langue code="oc_auv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_auv" total="123" traduits="63" relire="0" modifs="9" nouveaux="51" pourcent="51.22" />
<langue code="oc_gsc" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_gsc" total="123" traduits="63" relire="0" modifs="9" nouveaux="51" pourcent="51.22" />
<langue code="oc_lms" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_lms" total="123" traduits="63" relire="0" modifs="9" nouveaux="51" pourcent="51.22" />
<langue code="oc_lnc" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_lnc" total="123" traduits="66" relire="0" modifs="9" nouveaux="48" pourcent="53.66" />
<langue code="oc_ni" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni" total="123" traduits="70" relire="0" modifs="5" nouveaux="48" pourcent="56.91">
<langue code="no" url="https://trad.spip.net/tradlang_module/sites?lang_cible=no" total="122" traduits="3" relire="0" modifs="0" nouveaux="119" pourcent="2.46">
</langue>
<langue code="oc_auv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_auv" total="122" traduits="63" relire="0" modifs="9" nouveaux="50" pourcent="51.64">
</langue>
<langue code="oc_gsc" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_gsc" total="122" traduits="63" relire="0" modifs="9" nouveaux="50" pourcent="51.64">
</langue>
<langue code="oc_lms" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_lms" total="122" traduits="63" relire="0" modifs="9" nouveaux="50" pourcent="51.64">
</langue>
<langue code="oc_lnc" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_lnc" total="122" traduits="66" relire="0" modifs="9" nouveaux="47" pourcent="54.10">
</langue>
<langue code="oc_ni" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni" total="122" traduits="70" relire="0" modifs="5" nouveaux="47" pourcent="57.38">
<traducteur nom="sylvain" lien="https://trad.spip.net/auteur/sylvain" />
</langue>
<langue code="oc_ni_la" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni_la" total="123" traduits="62" relire="0" modifs="10" nouveaux="51" pourcent="50.41" />
<langue code="oc_ni_mis" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni_mis" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="oc_ni_la" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni_la" total="122" traduits="62" relire="0" modifs="10" nouveaux="50" pourcent="50.82">
</langue>
<langue code="oc_ni_mis" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_ni_mis" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="sylvain" lien="https://trad.spip.net/auteur/sylvain" />
</langue>
<langue code="oc_prv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_prv" total="123" traduits="65" relire="0" modifs="9" nouveaux="49" pourcent="52.85" />
<langue code="oc_va" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_va" total="123" traduits="63" relire="0" modifs="9" nouveaux="51" pourcent="51.22" />
<langue code="pl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pl" total="123" traduits="69" relire="0" modifs="9" nouveaux="45" pourcent="56.10">
<langue code="oc_prv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_prv" total="122" traduits="65" relire="0" modifs="9" nouveaux="48" pourcent="53.28">
</langue>
<langue code="oc_va" url="https://trad.spip.net/tradlang_module/sites?lang_cible=oc_va" total="122" traduits="63" relire="0" modifs="9" nouveaux="50" pourcent="51.64">
</langue>
<langue code="pl" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pl" total="122" traduits="69" relire="0" modifs="9" nouveaux="44" pourcent="56.56">
<traducteur nom="Karolina Anna" lien="https://trad.spip.net/auteur/karolina-anna" />
</langue>
<langue code="pt" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pt" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="pt" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pt" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Cláudia Anjos Lopes" lien="https://trad.spip.net/auteur/claudia_a_lopes" />
</langue>
<langue code="pt_br" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pt_br" total="123" traduits="123" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<langue code="pt_br" url="https://trad.spip.net/tradlang_module/sites?lang_cible=pt_br" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="Ricardo Porto" lien="https://trad.spip.net/auteur/ricardo-porto" />
<traducteur nom="telopa" lien="https://trad.spip.net/auteur/telopa" />
</langue>
<langue code="ro" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ro" total="123" traduits="71" relire="0" modifs="8" nouveaux="44" pourcent="57.72">
<langue code="ro" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ro" total="122" traduits="71" relire="0" modifs="8" nouveaux="43" pourcent="58.20">
<traducteur nom="vmurariu" lien="https://trad.spip.net/auteur/vmurariu" />
</langue>
<langue code="ru" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ru" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="ru" url="https://trad.spip.net/tradlang_module/sites?lang_cible=ru" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="olly" lien="https://trad.spip.net/auteur/olly" />
<traducteur nom="Serge Markitanenko" lien="https://trad.spip.net/auteur/serge-markitanenko" />
</langue>
<langue code="sk" url="https://trad.spip.net/tradlang_module/sites?lang_cible=sk" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="sk" url="https://trad.spip.net/tradlang_module/sites?lang_cible=sk" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="jaro" lien="https://trad.spip.net/auteur/jaro" />
</langue>
<langue code="sv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=sv" total="123" traduits="57" relire="0" modifs="6" nouveaux="60" pourcent="46.34" />
<langue code="tr" url="https://trad.spip.net/tradlang_module/sites?lang_cible=tr" total="123" traduits="68" relire="0" modifs="8" nouveaux="47" pourcent="55.28" />
<langue code="uk" url="https://trad.spip.net/tradlang_module/sites?lang_cible=uk" total="123" traduits="122" relire="0" modifs="0" nouveaux="1" pourcent="99.19">
<langue code="sv" url="https://trad.spip.net/tradlang_module/sites?lang_cible=sv" total="122" traduits="57" relire="0" modifs="6" nouveaux="59" pourcent="46.72">
</langue>
<langue code="tr" url="https://trad.spip.net/tradlang_module/sites?lang_cible=tr" total="122" traduits="68" relire="0" modifs="8" nouveaux="46" pourcent="55.74">
</langue>
<langue code="uk" url="https://trad.spip.net/tradlang_module/sites?lang_cible=uk" total="122" traduits="122" relire="0" modifs="0" nouveaux="0" pourcent="100.00">
<traducteur nom="olly" lien="https://trad.spip.net/auteur/olly" />
<traducteur nom="Retenodus" lien="https://trad.spip.net/auteur/retenodus" />
</langue>
<langue code="vi" url="https://trad.spip.net/tradlang_module/sites?lang_cible=vi" total="123" traduits="62" relire="0" modifs="10" nouveaux="51" pourcent="50.41" />
<langue code="zh" url="https://trad.spip.net/tradlang_module/sites?lang_cible=zh" total="123" traduits="54" relire="0" modifs="11" nouveaux="58" pourcent="43.90" />
<langue code="vi" url="https://trad.spip.net/tradlang_module/sites?lang_cible=vi" total="122" traduits="62" relire="0" modifs="10" nouveaux="50" pourcent="50.82">
</langue>
<langue code="zh" url="https://trad.spip.net/tradlang_module/sites?lang_cible=zh" total="122" traduits="54" relire="0" modifs="11" nouveaux="57" pourcent="44.26">
</langue>
</traduction>

5
lang/sites_ar.php

@ -41,7 +41,6 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'entree_description_site' => 'وصف الموقع',
'erreur_fichier_format_inconnu' => 'تنسيق الملف @fichier@ غير مدعوم.',
'erreur_fichier_incorrect' => 'لا يمكن قراءة الملف.',
'erreur_methode_syndication_inconnue' => 'طريقة ترخيص @methode@ غير معروفة',
// F
'form_prop_nom_site' => 'اسم الموقع',
@ -62,8 +61,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_1_site' => 'موقع واحد',
'info_1_site_importe' => 'تم جلب موقع واحد',
'info_a_valider' => '[بانتظار التصديق]',
'info_aucun_article_syndique' => 'لا يوجد اي مقال مرخص',
'info_aucun_site' => 'لا يوجد اي موقع',
'info_aucun_article_syndique' => 'لا مقال مرخص',
'info_aucun_site' => 'لا موقع',
'info_aucun_site_importe' => 'لم يتم جلب اي موقع',
'info_bloquer' => 'إيقاف',
'info_bloquer_lien' => 'صد هذه الوصلة',

50
lang/sites_br.php

@ -14,9 +14,8 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'articles_meme_auteur' => 'Bep pennadou gant ar saver-mañ',
'articles_off' => 'Stanket',
'articles_publie' => 'Embannnet',
'articles_refuse' => 'Dilemet',
'articles_refuse' => 'Lazhet', # RELIRE
'articles_tous' => 'Pep tra',
'aucun_article_syndic' => 'N’eus pennad-skrid sindikadet ebet',
'avis_echec_syndication_01' => 'C’hwitet eo bet ar sindikadur : dilennus eo ar backend kinniget, pe ne ginnig pennad ebet.',
'avis_echec_syndication_02' => 'C’hwitet eo bet ar sindikadur : n’eus ket tu da dizhout backend al lec’hienn-mañ.',
'avis_site_introuvable' => 'N’haller ket kavout al lec’hienn-se',
@ -25,53 +24,42 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'avis_sites_syndiques_probleme' => 'Kudennoù zo savet gant al lec’hiennoù sindikadet-se',
// B
'bouton_exporter' => 'Ezporzhiañ',
'bouton_exporter' => 'Ezkas', # RELIRE
'bouton_importer' => 'Dikas',
'bouton_radio_modere_posteriori' => 'adwelet goude an embann',
'bouton_radio_modere_priori' => 'adwelet a-raok an embann',
'bouton_radio_non_syndication' => 'Sindikadur ebet',
'bouton_radio_syndication' => 'Sindikadur :',
// C
'confirmer_purger_syndication' => 'Hoc’h eus c’hoant da zilemel an holl pennadoù-skrid sindikadet deus al lec’hienn-mañ ?',
// E
'entree_adresse_fichier_syndication' => 'Chomlec’h ar restr evit ar sindikadur :',
'entree_adresse_site' => '<b>Chomlec’h al lec’hienn</b> [Rekis]',
'entree_description_site' => 'Deskrivadenn al lec’hienn',
'erreur_fichier_format_inconnu' => 'N’eo ket kemeret furmad ar restr @fichier@ e karg.',
'erreur_fichier_incorrect' => 'Diposubl da lenn ar fichennaoueg',
// F
'form_prop_nom_site' => 'Anv al lec’hienn',
// I
'icone_article_syndic' => 'Pennad-skrid sindikadet',
'icone_articles_syndic' => 'Pennadoù-skrid sindikadet',
'icone_controler_syndication' => 'Embannadenn ar pennadoù-skrid sindikadet',
'icone_modifier_site' => 'Kemmañ al lec’hienn-mañ',
'icone_referencer_nouveau_site' => 'Menegeriñ ul lec’hienn nevez',
'icone_site_reference' => 'Lec’hioù daveennet',
'icone_supprimer_article' => 'Dilemel ar pennad-mañ',
'icone_supprimer_articles' => 'Dilemel ar pennadoù-skrid-mañ',
'icone_valider_article' => 'Gwiriañ ar pennad-mañ',
'icone_supprimer_article' => 'Larzh ar pennad-mañ',
'icone_valider_article' => 'Gwirian ar pennad-mañ',
'icone_valider_articles' => 'Gwirian ar pennad-mañ',
'icone_voir_sites_references' => 'Gwelet al lec’hiennoù menegeret',
'info_1_article_syndique' => '1 pennad-skrid sindikadet',
'info_1_site' => '1 lec’hienn',
'info_1_site_importe' => 'Unan lech’ienn a zo bet ezkas',
'info_a_valider' => '[da wiriañ]',
'info_aucun_article_syndique' => 'Pennad-skrid sindikadet ebet',
'info_aucun_article_syndique' => 'Pennad-skrid amaezhiet ebet',
'info_aucun_site' => 'lec’hienn ebet',
'info_aucun_site_importe' => 'Bez eus enporzhiet lec’hienn ebet',
'info_bloquer' => 'stankañ',
'info_bloquer_lien' => 'Stankañ al liamm-mañ',
'info_derniere_syndication' => 'Sindikadur diwezhañ al lec’hienn-mañ a zo bet graet d’an',
'info_liens_syndiques_1' => 'Liammoù sindikadet',
'info_liens_syndiques_2' => 'o c’hortoz bezañ asantet.',
'info_nb_articles_syndiques' => '@nb@ pennadoù-skrid sindikadet ',
'info_nb_articles_syndiques' => '@nb@ pennadoù-skrid amaezhiet',
'info_nb_sites' => '@nb@ lec’hiennoù',
'info_nb_sites_importes' => '@nb@ lec’hiennoù zo bet enporzhiet',
'info_nom_site_2' => '<b>Anv al lec’hienn</b> [Rekis]',
'info_panne_site_syndique' => 'Sac’het eo al lec’hienn sindikadet',
'info_probleme_grave' => 'kudenn a',
@ -93,25 +81,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'info_syndication_articles' => 'pennad(où)',
'item_bloquer_liens_syndiques' => 'Stankañ al liammoù sindikadet evit o c’hadarnaat',
'item_gerer_annuaire_site_web' => 'Merañ ur roll lec’hiennoù Web',
'item_non_bloquer_liens_syndiques' => 'Arabat stankañ al liammoù deuet diwar ar sindikadur',
'item_non_bloquer_liens_syndiques' => 'Arabat stankañ al liammoù deuet diwar ar sindikad',
'item_non_gerer_annuaire_site_web' => 'Diweredekaat roll al lec’hiennoù Web',
'item_non_utiliser_syndication' => 'Na implijout ar sindikadur emgefre',
'item_non_utiliser_syndication' => 'Na implijout ar sindikad emgefre',
'item_utiliser_syndication' => 'Implijout ar sindikadur emgefre',
// L
'label_exporter_id_parent' => 'Ezhporzhiañ lec’hiennoù ar rubrikenn',
'label_exporter_publie_seulement_1' => ' Digas nemetken ar lec’hiennoù embannet',
'label_fichier_import' => 'Restr HTML',
'label_importer_statut_publie_1' => 'Enbann emgefreek al lec’hiennoù',
'lien_mise_a_jour_syndication' => 'Hizivaat bremañ',
'lien_nouvelle_recuperation' => 'Klask adtapout an titouroù en-dro',
'lien_purger_syndication' => 'Diverkañ an holl pennadoù-skrid sindikadet',
// N
'nombre_articles_syndic' => '@nb@ pennadoù-skrid sindikadet',
// S
'statut_off' => 'Dilemet',
'statut_off' => 'Larzhet',
'statut_prop' => 'En gortoz',
'statut_publie' => 'Embannet',
'syndic_choix_moderation' => 'Petra ober gant al liammoù a zeu o tont eus al lec’hienn-mañ ?',
@ -122,7 +103,7 @@ $GLOBALS[$GLOBALS['idx_lang']] = array(
'syndic_option_oubli' => 'diverkañ anezho (goude @mois@ miz)',
'syndic_option_resume_non' => 'endalc’had klok ar pennadoù (er furmad HTML)',
'syndic_option_resume_oui' => 'un diverrañ hepken (e furmad testenn)',
'syndic_options' => 'Dibarzhioù sindikadur :',
'syndic_options' => 'Dibarzhioù sindikad :',
// T
'texte_liens_sites_syndiques' => 'Gallout a ra al liammoù deuet diwar lec’hiennoù sindikadet bezañ stanket a-raok embann