From fa4e1c7336cf8b8ef9b41934a7ca6b714f3928fa Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 11 Sep 2019 15:17:18 +0200 Subject: [PATCH] Prepare i18n --- Makefile | 79 +++++++++++------ index.html | 6 +- public/{ => img}/icons/apple-touch-icon.png | Bin public/{ => img}/icons/favicon.png | Bin public/img/icons/instance.svg | 8 -- public/img/language.png | Bin 0 -> 960 bytes src/components/Header.vue | 3 +- src/components/I18n.vue | 52 ++++++------ src/components/icons/IconAdd.vue | 18 ++++ src/locale/en_US/LC_MESSAGES/app.po | 23 +++++ src/locale/fr_FR/LC_MESSAGES/app.po | 24 ++++++ src/locale/fr_FR/LC_MESSAGES/app.po~ | 24 ++++++ src/main.js | 61 ++++++++++++-- src/translations.json | 1 + src/views/Home.vue | 89 +++++++++----------- zanata/backup/.gitignore | 2 - zanata/po/.gitignore | 2 - zanata/scripts/po2yml.sh | 7 -- zanata/scripts/yml2po.sh | 16 ---- zanata/yml/.gitignore | 2 - zanata/zanata.xml | 9 -- 21 files changed, 274 insertions(+), 152 deletions(-) rename public/{ => img}/icons/apple-touch-icon.png (100%) rename public/{ => img}/icons/favicon.png (100%) delete mode 100644 public/img/icons/instance.svg create mode 100644 public/img/language.png create mode 100644 src/components/icons/IconAdd.vue create mode 100644 src/locale/en_US/LC_MESSAGES/app.po create mode 100644 src/locale/fr_FR/LC_MESSAGES/app.po create mode 100644 src/locale/fr_FR/LC_MESSAGES/app.po~ create mode 100644 src/translations.json delete mode 100644 zanata/backup/.gitignore delete mode 100644 zanata/po/.gitignore delete mode 100755 zanata/scripts/po2yml.sh delete mode 100755 zanata/scripts/yml2po.sh delete mode 100644 zanata/yml/.gitignore delete mode 100644 zanata/zanata.xml diff --git a/Makefile b/Makefile index 028af20..3f77bbb 100644 --- a/Makefile +++ b/Makefile @@ -1,33 +1,64 @@ -backup-locales: - cp app/locales/*.yml zanata/backup/ +# From https://raw.githubusercontent.com/Polyconseil/vue-gettext/master/Makefile -restore-locales: - cp zanata/backup/*.yml app/locales/ +# On OSX the PATH variable isn't exported unless "SHELL" is also set, see: http://stackoverflow.com/a/25506676 +SHELL = /bin/bash +NODE_BINDIR = ./node_modules/.bin +export PATH := $(NODE_BINDIR):$(PATH) +LOGNAME ?= $(shell logname) -prepare-locales: - rm -f zanata/yml/*.yml zanata/po/*.po zanata/po/*.pot zanata/po/*.err +# adding the name of the user's login name to the template file, so that +# on a multi-user system several users can run this without interference +TEMPLATE_POT ?= /tmp/template-$(LOGNAME).pot -clean-locales: backup-locales prepare-locales - zanata/scripts/yml2po.sh - zanata/scripts/po2yml.sh +# Where to find input files (it can be multiple paths). +INPUT_FILES = ./src -po: - zanata/scripts/yml2po.sh +# Where to write the files generated by this makefile. +OUTPUT_DIR = ./src -yml: backup-locales - zanata/scripts/po2yml.sh +# Available locales for the app. +LOCALES = en_US fr_FR -push-locales: po - zanata-cli -q -B push --push-type both +# Name of the generated .po files for each available locale. +LOCALE_FILES ?= $(patsubst %,$(OUTPUT_DIR)/locale/%/LC_MESSAGES/app.po,$(LOCALES)) -pull-locales: prepare-locales - cp -n zanata/zanata.xml zanata.xml - sed -e 's@@join-peertube@' -i zanata.xml - zanata-cli -q -B pull --pull-type both --min-doc-percent 75 - make yml +GETTEXT_SOURCES ?= $(shell find $(INPUT_FILES) -name '*.jade' -o -name '*.html' -o -name '*.js' -o -name '*.vue' 2> /dev/null) -preview: - npm run preview +# Makefile Targets +.PHONY: clean makemessages translations all -build: - npm run prod +all: + @echo choose a target from: clean makemessages translations + +clean: + rm -f $(TEMPLATE_POT) $(OUTPUT_DIR)/translations.json + +makemessages: $(TEMPLATE_POT) + +translations: ./$(OUTPUT_DIR)/translations.json + +# Create a main .pot template, then generate .po files for each available language. +# Thanx to Systematic: https://github.com/Polyconseil/systematic/blob/866d5a/mk/main.mk#L167-L183 +$(TEMPLATE_POT): $(GETTEXT_SOURCES) +# `dir` is a Makefile built-in expansion function which extracts the directory-part of `$@`. +# `$@` is a Makefile automatic variable: the file name of the target of the rule. +# => `mkdir -p /tmp/` + mkdir -p $(dir $@) +# Extract gettext strings from templates files and create a POT dictionary template. + gettext-extract --quiet --attribute v-translate --output $@ $(GETTEXT_SOURCES) +# Generate .po files for each available language. + @for lang in $(LOCALES); do \ + export PO_FILE=$(OUTPUT_DIR)/locale/$$lang/LC_MESSAGES/app.po; \ + mkdir -p $$(dirname $$PO_FILE); \ + if [ -f $$PO_FILE ]; then \ + echo "msgmerge --update $$PO_FILE $@"; \ + msgmerge --lang=$$lang --update $$PO_FILE $@ || break ;\ + else \ + msginit --no-translator --locale=$$lang --input=$@ --output-file=$$PO_FILE || break ; \ + msgattrib --no-wrap --no-obsolete -o $$PO_FILE $$PO_FILE || break; \ + fi; \ + done; + +$(OUTPUT_DIR)/translations.json: $(LOCALE_FILES) + mkdir -p $(OUTPUT_DIR) + gettext-compile --output $@ $(LOCALE_FILES) diff --git a/index.html b/index.html index 46037de..a383d99 100644 --- a/index.html +++ b/index.html @@ -5,10 +5,12 @@ - - + + +
+ diff --git a/public/icons/apple-touch-icon.png b/public/img/icons/apple-touch-icon.png similarity index 100% rename from public/icons/apple-touch-icon.png rename to public/img/icons/apple-touch-icon.png diff --git a/public/icons/favicon.png b/public/img/icons/favicon.png similarity index 100% rename from public/icons/favicon.png rename to public/img/icons/favicon.png diff --git a/public/img/icons/instance.svg b/public/img/icons/instance.svg deleted file mode 100644 index 0e22b3a..0000000 --- a/public/img/icons/instance.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/public/img/language.png b/public/img/language.png new file mode 100644 index 0000000000000000000000000000000000000000..d65b158c38ffdfab55f5f134b9ce1c5691a3cae7 GIT binary patch literal 960 zcmeAS@N?(olHy`uVBq!ia0vp^;vmey0wleZWwe15OS+@4BLl<6e(pbstU$g(vPY0F z14ES>14Ba#1H&(%P{RubhEf9thF1v;3|2FM`U~dl3bX-AFeQ1ryDHJU{UYr^WqDy1{@4!_xBc>!=9ibS z`THem28ZIDx;3l$&d72th`c{(U+UuWNz#{pZ#jG6vS{FJd+gF@hwK95M(!yVF+y9+xt(kFn=>)ze zg(GQYkJ)t8CmPLsmm9VE#im5*l90Xj?-nc)?lO5bNzswxa^r&g`C>cM-Ch69>OVTS zT-b|gW8|y+w_#TA*gtE1nk#i=&FWqHY!eOL?{0{_7PtBD>5BW7f45yZ)hy;NW0bbi zSM(L{+jY{{7QXzs>#&pZFWs_Jx0xQ5b^mrbS+lln)!oEP*Y6buTneAZ5x4Q6_%{pX z^}k)ezfawx{f?Q{(y;#K`)z^tU0*Cxv(DK*Yis}3sqLQ}v?Sqz#*bsZFSEX9o_;f( zMfjbR#Q*mjRi8~)4S$;UY`xGjIo5KXzt$ChUmbY=_h@z4?X=CJK~tV>Vh;@IxL;&h z|FK`&{;A%Sw*NI-!Y1xMmwj>B@vzk?DlQ(LZ*Np>{C#>??yU13SO4vI>)!I>+sgNQ z>}D^~^q9DHOIYrD?Q3U36avr9o8Esaw*EZx{$2S_8xEYlR( zQ-CT|K`K%bOH!?pLCR7Yj0_Adbqy?a4GlvKjjW6IQ+eo=O@ Xf^)EG;nv4yKy?hBu6{1-oD!M - PeerTube + PeerTube
soutenu par @@ -93,6 +93,7 @@ export default { components: { I18n }, + methods: { getPath (path) { return path diff --git a/src/components/I18n.vue b/src/components/I18n.vue index e5f4e10..fb7fca0 100644 --- a/src/components/I18n.vue +++ b/src/components/I18n.vue @@ -2,28 +2,26 @@ @@ -40,6 +38,12 @@ .dropdown-toggle::after { display: none; } + + .translate svg { + width: 20px; + margin-right: 5px; + vertical-align: top; + } } @@ -51,22 +55,20 @@ diff --git a/src/locale/en_US/LC_MESSAGES/app.po b/src/locale/en_US/LC_MESSAGES/app.po new file mode 100644 index 0000000..d477980 --- /dev/null +++ b/src/locale/en_US/LC_MESSAGES/app.po @@ -0,0 +1,23 @@ +msgid "" +msgstr "" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: easygettext\n" +"Project-Id-Version: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: src/views/Home.vue:7 +msgid "A free software to take back control of your videos" +msgstr "A free software to take back control of your videos" + +#: src/components/I18n.vue:7 +msgid "Languages" +msgstr "Languages" + +#: src/components/I18n.vue:21 +msgid "Translate" +msgstr "Translate" diff --git a/src/locale/fr_FR/LC_MESSAGES/app.po b/src/locale/fr_FR/LC_MESSAGES/app.po new file mode 100644 index 0000000..b4b76ec --- /dev/null +++ b/src/locale/fr_FR/LC_MESSAGES/app.po @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: easygettext\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/views/Home.vue:7 +msgid "A free software to take back control of your videos" +msgstr "Un logiciel libre pour reprendre le contrôle de vos vidéos" + +#: src/components/I18n.vue:7 +#, fuzzy +msgid "Languages" +msgstr "Langues" + +#: src/components/I18n.vue:21 +msgid "Translate" +msgstr "Traduire" diff --git a/src/locale/fr_FR/LC_MESSAGES/app.po~ b/src/locale/fr_FR/LC_MESSAGES/app.po~ new file mode 100644 index 0000000..b4b76ec --- /dev/null +++ b/src/locale/fr_FR/LC_MESSAGES/app.po~ @@ -0,0 +1,24 @@ +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: fr_FR\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: easygettext\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: src/views/Home.vue:7 +msgid "A free software to take back control of your videos" +msgstr "Un logiciel libre pour reprendre le contrôle de vos vidéos" + +#: src/components/I18n.vue:7 +#, fuzzy +msgid "Languages" +msgstr "Langues" + +#: src/components/I18n.vue:21 +msgid "Translate" +msgstr "Traduire" diff --git a/src/main.js b/src/main.js index f7f7f35..1386a6f 100644 --- a/src/main.js +++ b/src/main.js @@ -9,20 +9,67 @@ import Home from './views/Home.vue' import './scss/bootstrap.scss' import './scss/main.scss' +import CommonMixins from './mixins/Common-Mixins' + +const translations = require('./translations.json') Vue.use(VueRouter) -Vue.use(GetTextPlugin, { translations: {} }) + +// ############# I18N ############## + +const availableLanguages = { + 'en_US': 'English', + 'fr_FR': 'Français' +} +const aliasesLanguages = { + 'en': 'en_US', + 'fr': 'fr_FR' +} +const allLocales = Object.keys(availableLanguages).concat(Object.keys(aliasesLanguages)) + +Vue.use(GetTextPlugin, { + translations, + availableLanguages, + defaultLanguage: 'en_US', + silent: true +}) + +const localePath = window.location.pathname + .replace(/^\//, '') + .replace(/\/$/, '') + +if (allLocales.includes(localePath)) { + Vue.config.language = aliasesLanguages[localePath] ? aliasesLanguages[localePath] : localePath +} else { + const navigatorLanguage = window.navigator.userLanguage || window.navigator.language + const snakeCaseLanguage = navigatorLanguage.replace('-', '_') + Vue.config.language = aliasesLanguages[snakeCaseLanguage] ? aliasesLanguages[snakeCaseLanguage] : snakeCaseLanguage +} + +// ########################### + Vue.component('vue-headful', vueHeadful) +Vue.mixin(CommonMixins) + +const routes = [ + { + path: '/', + component: Home + } +] + +for (const locale of allLocales) { + routes.push({ + path: '/' + locale, + component: Home + }) +} + const router = new VueRouter({ mode: 'history', base: `${__dirname}${process.env.BASE_URL}`, - routes: [ - { - path: '/', - component: Home - } - ] + routes }) // Framanav diff --git a/src/translations.json b/src/translations.json new file mode 100644 index 0000000..c2756e7 --- /dev/null +++ b/src/translations.json @@ -0,0 +1 @@ +{"en_US":{"A free software to take back control of your videos":"A free software to take back control of your videos","Languages":"Languages","Translate":"Translate"},"fr_FR":{"A free software to take back control of your videos":"Un logiciel libre pour reprendre le contrôle de vos vidéos","Translate":"Traduire"}} \ No newline at end of file diff --git a/src/views/Home.vue b/src/views/Home.vue index 1e682d0..24530c1 100644 --- a/src/views/Home.vue +++ b/src/views/Home.vue @@ -8,7 +8,7 @@
A free software to take back control of your videos
-
+
With more than 100 000 hosted videos, viewed more than 6 millions times and 20 000 users, PeerTube is the decentralized free software alternative to videos platforms developed by Framasoft
@@ -17,20 +17,20 @@
-
Discover our content selection
+
Discover our content selection
@@ -44,7 +44,7 @@ @@ -52,7 +52,7 @@
-
+
What is PeerTube ? @@ -65,32 +65,32 @@
-
+
L’ambition de PeerTube, c'est d’être une alternative libre et décentralisée aux services de diffusion de vidéos.
-

+

Le but n’est pas de remplacer, mais de proposer quelque chose d’autre, avec des valeurs différentes, en parallèle de ce qui existe déjà.

-
Une fédération d'hébergements interconnectés
+
Une fédération d'hébergements interconnectés
Funny federation schema
-
+
PeerTube n’est pas pensé pour créer une énorme plateforme centralisant les vidéos du monde entier. Il s’agit plutôt d'un réseau de nombreux petits hébergeurs de vidéos, connectés les uns aux autres.
-

+

N’importe qui ayant un minimum de compétences techniques peut héberger un serveur PeerTube qu’on nomme instance. Chaque instance héberge ses propres utilisateur⋅ices et leurs vidéos. Ainsi, toutes les instances sont créées, animées, modérées et maintenues de façon indépendante par des administrateur⋅ices différent⋅e⋅s. @@ -98,14 +98,14 @@

Funny 2 instances communication schema -

+

Mais vous avez tout de même la possibilité de regarder depuis l'instance sur laquelle vous êtes inscrit·e des vidéos qui se trouvent ailleurs ; il suffit que l'administrateur·ice l'ai autorisé !

@@ -113,12 +113,12 @@
-
C'est le principe de la fédération !
+
C'est le principe de la fédération !
Federation with Mastodon funny schema -

+

Mais ce n’est pas tout ! Le protocole de fédération ActivityPub (qu’utilise PeerTube) permet aussi d’interagir avec d’autres logiciels utilisant ce même protocole. Par exemple, PeerTube et le réseau social Mastodon, alternative à Twitter, sont liés : il est possible de « suivre » un utilisateur PeerTube depuis Mastodon @@ -128,18 +128,18 @@

-
Un code ouvert sous licence libre
+
Un code ouvert sous licence libre
PeerTube is a free software funny schema -

+

Les principaux services de diffusion de vidéo en ligne utilisent vos données pour gagner de l'argent en analysant vos interactions et en utilisant ces informations pour vous matraquer en publicités ciblées.

@@ -147,19 +147,19 @@
-
+
PeerTube n’est soumis au monopole d’aucune entreprise, ne dépend d’aucune publicité et ne vous piste pas.
-

+

Mais surtout, PeerTube vous considère comme une personne, et non pas comme un produit qu’il faut profiler et enfermer dans des boucles vidéos. PeerTube n’utilise par exemple aucun algorithme de recommandation biaisé pour vous faire rester indéfiniment en ligne.

-

+

Tout cela est possible car PeerTube est un logiciel libre (licence GNU-AGPL pour les connaisseur⋅euses). Son code est un « commun » numérique, partagé avec tous et toutes, et non une recette secrète appartenant à Google (pour YouTube) ou à Vivendi/Bolloré (pour Dailymotion). Cette licence libre garantit nos libertés fondamentales d’utilisateur⋅ices et @@ -168,26 +168,26 @@

-
Vous êtes vidéaste ?
+
Vous êtes vidéaste ?
PeerTube upload illustration
-
+
PeerTube vous permet de choisir un hébergement et des règles qui vous correspondent.
-
+
On l’a vu avec les dérives de YouTube : son hébergeur, Google-Alphabet, peut imposer son système ContentID (le fameux « Robocopyright ») ou ses outils de mise en valeur des vidéos, qui semblent aussi obscurs qu’injustes.
@@ -195,13 +195,13 @@
-
+
Être en contact direct avec un hébergeur à taille humaine vous permet, non seulement de ne plus être le client d'une grande entreprise du numérique, mais surtout d'avoir des rapports privilégiés avec les personnes qui hébergent et diffusent vos données.
-
+
Avec PeerTube, vous choisissez l’hébergeur de vos vidéos selon ses conditions d’utilisation, telles que la limite d’espace disque par utilisateur⋅ice, la politique de modération, les choix de fédération... Comme vous n’avez pas un géant du web en face de vous, vous pourrez probablement discuter ensemble si vous avez un souci, un besoin, une envie... @@ -210,31 +210,31 @@
-
De la diffusion – et donc du visionnage – en pair-à-pair
+
De la diffusion – et donc du visionnage – en pair-à-pair
PeerTube P2P illustration
-
+
Le logiciel PeerTube peut au besoin utiliser un protocole pair-à-pair (P2P) pour diffuser des vidéos très regardées par les internautes (vidéos virales), ce qui permet d'alléger la charge des sites web qui les hébergent.
-

+

Ainsi, quand vous visionnez une vidéo, votre ordinateur participe à sa diffusion. Si beaucoup de personnes regardent la même vidéo au même moment, leur navigateur envoie automatiquement des bouts de la vidéo aux autres spectateur⋅ices. Cela permet de ne pas surexploiter les ressources du serveur : les flux se répartissent, le réseau est optimisé.

-

+

Mine de rien, avant cette diffusion en pair-à-pair, les vidéastes à succès (ou les vidéos qui font le buzz) étaient condamnés à s’héberger chez un géant du web dont l’infrastructure peut encaisser des milliers de vues simultanées… Ou à payer très cher un hébergement de vidéo indépendant afin qu’il tienne la charge.

@@ -242,21 +242,21 @@
-
À vous de jouer !
+
À vous de jouer !
PeerTube you play illustration
-
+
Pour profiter de toutes les fonctionnalités : historique, abonnements, listes de lectures, notifications...
@@ -265,22 +265,22 @@
-
Qui est derrière PeerTube ?
+
Qui est derrière PeerTube ?
-

+

PeerTube est un logiciel libre gratuit financé par une association française à but non lucratif : Framasoft.

-

+

Créée en 2004, l'association se consacre désormais à l’éducation populaire aux enjeux du numérique. Notre petite structure (moins de 40 membres, moins de 10 salarié·e·s) est connue pour avoir réalisé le projet Dégooglisons Internet, proposant 34 outils en ligne éthiques et alternatifs. Reconnue d’intérêt général, notre association est financée à plus de 90% par vos dons, déductibles des impôts pour les contribuables français·es.

-

+

Suite au financement participatif lancé entre mars et juillet 2018, Framasoft a pu financer l'emploi du développeur principal de PeerTube. Ainsi, après une version bêta en mars 2018, la version 1 est sortie en novembre 2018. Depuis, plusieurs versions intermédiaires ont apporté de nombreuses fonctionnalités. Plusieurs collectifs ont déjà monté @@ -288,14 +288,14 @@

- + Plus ce logiciel sera utilisé et soutenu, plus des personnes l’utiliseront et y contribueront, et plus vite il évoluera vers une alternative concrète aux plateformes telles que YouTube.

@@ -400,13 +400,8 @@ import IconInstance from '../components/icons/IconInstance.vue' import ContentSelection from '../components/ContentSelection.vue' import IconRight from '../components/icons/IconRight.vue' -import JPTMixins from '../mixins/Common-Mixins.js' export default { - mixins: [ - JPTMixins - ], - components: { ContentSelection, IconInstance, diff --git a/zanata/backup/.gitignore b/zanata/backup/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/zanata/backup/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/zanata/po/.gitignore b/zanata/po/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/zanata/po/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/zanata/scripts/po2yml.sh b/zanata/scripts/po2yml.sh deleted file mode 100755 index 96b5c1d..0000000 --- a/zanata/scripts/po2yml.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -for i in zanata/po/*.po -do - j=$(echo $i | cut -d '.' -f 1 | cut -d '/' -f 3) - po2yaml -i $i --progress none -t zanata/backup/en.yml -o zanata/yml/$j.yml -done -cp zanata/yml/*.yml app/locales/ diff --git a/zanata/scripts/yml2po.sh b/zanata/scripts/yml2po.sh deleted file mode 100755 index 7455426..0000000 --- a/zanata/scripts/yml2po.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/bash -cp app/locales/*.yml zanata/yml/ -yaml2po -P --progress=none -i zanata/yml/en.yml -o zanata/po/${PWD##*/}.pot -for i in app/locales/*.yml -do - j=$(echo $i | cut -d '.' -f 1 | cut -d '/' -f 3) - yaml2po --progress=none -t zanata/yml/en.yml -i zanata/yml/$j.yml -o zanata/po/$j.po - - # Rename empty (almost) .po - tail -n +2 zanata/po/$j.po > zanata/po/tmp.1 - tail -n +2 zanata/po/${PWD##*/}.pot > zanata/po/tmp.2 - if((`stat -c%s "zanata/po/tmp.1"` <= `stat -c%s "zanata/po/tmp.2"`));then - mv zanata/po/$j.po zanata/po/$j.err - fi - rm zanata/po/tmp.1 zanata/po/tmp.2 -done diff --git a/zanata/yml/.gitignore b/zanata/yml/.gitignore deleted file mode 100644 index d6b7ef3..0000000 --- a/zanata/yml/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!.gitignore diff --git a/zanata/zanata.xml b/zanata/zanata.xml deleted file mode 100644 index 1e497e3..0000000 --- a/zanata/zanata.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - https://trad.framasoft.org/ - join-peertube - master - gettext - zanata/po - zanata/po -