[Blends-commit] [Git][blends-team/blends][master] 59 commits: first publication

Andreas Tille (@tille) gitlab at salsa.debian.org
Sat Nov 30 21:21:51 GMT 2024



Andreas Tille pushed to branch master at Debian Blends Team / blends


Commits:
39564967 by Georges Khaznadar at 2024-11-19T22:17:02+01:00
first publication

- - - - -
c3343399 by Georges Khaznadar at 2024-11-19T22:27:28+01:00
trying to make normalized lines correctly

- - - - -
034cc54e by Georges Khaznadar at 2024-11-19T23:28:08+01:00
fixed the xpath to tails of sub-elements of translatable elements

- - - - -
8341e916 by Georges Khaznadar at 2024-11-19T23:39:15+01:00
improved the comments

- - - - -
cd9942bb by Georges Khaznadar at 2024-11-19T23:42:01+01:00
process only non-empty text chunks

- - - - -
77e69656 by Georges Khaznadar at 2024-11-19T23:43:10+01:00
fixed the test for empty text chunks

- - - - -
b7489a7c by Georges Khaznadar at 2024-11-19T23:45:14+01:00
fixed an issue with double quotes

- - - - -
03fe7bc0 by Georges Khaznadar at 2024-11-20T12:40:00+01:00
more tags to be translated

- - - - -
b0c98682 by Georges Khaznadar at 2024-11-20T12:41:31+01:00
added a directory for French documents

- - - - -
088737df by Georges Khaznadar at 2024-11-20T12:59:22+01:00
new target: update_po and FR lang

- - - - -
b7503525 by Georges Khaznadar at 2024-11-20T15:35:44+01:00
first publication of fr.po

- - - - -
e0a051d6 by Georges Khaznadar at 2024-11-20T15:36:45+01:00
ignore pot file

- - - - -
76cd97a7 by Georges Khaznadar at 2024-11-20T16:07:55+01:00
use a new class PotEntry

- - - - -
c634b846 by Georges Khaznadar at 2024-11-20T16:08:30+01:00
more FR translations

- - - - -
4dbfb38f by Georges Khaznadar at 2024-11-20T16:09:03+01:00
target update_po less verbose

- - - - -
947e799d by Georges Khaznadar at 2024-11-20T16:33:46+01:00
ignore MO files

- - - - -
100f4f3b by Georges Khaznadar at 2024-11-20T16:34:05+01:00
update MO files

- - - - -
a1a27696 by Georges Khaznadar at 2024-11-20T19:43:29+01:00
placed normalizedText in a common file

- - - - -
66cfda43 by Georges Khaznadar at 2024-11-20T19:43:59+01:00
ignore more files

- - - - -
2f20db00 by Georges Khaznadar at 2024-11-20T19:44:41+01:00
first publication of debian-blends.fr.xml

- - - - -
2a0ad838 by Georges Khaznadar at 2024-11-20T19:45:12+01:00
refined a little doc/Makefile

- - - - -
0458bad0 by Georges Khaznadar at 2024-11-20T19:54:03+01:00
fixed the cases when msgstr is longer than 1 line

- - - - -
825eab63 by Georges Khaznadar at 2024-11-20T20:15:56+01:00
fixed a bug with escaped double quotes

- - - - -
d60aef67 by Georges Khaznadar at 2024-11-20T22:57:58+01:00
fixed a fetranslations

- - - - -
2ac71d05 by Georges Khaznadar at 2024-11-21T08:22:53+01:00
simplified escaping (or not escaping) the double quotes

- - - - -
60759533 by Georges Khaznadar at 2024-11-21T08:23:06+01:00
more translations

- - - - -
ec809313 by Georges Khaznadar at 2024-11-21T17:49:41+01:00
progress in FR translation

- - - - -
e36d2ee0 by Georges Khaznadar at 2024-11-22T09:45:23+01:00
progress in FR translation

- - - - -
ce43a3cc by Georges Khaznadar at 2024-11-22T10:23:04+01:00
added blends.pot as a target

- - - - -
7189b360 by Georges Khaznadar at 2024-11-22T10:57:15+01:00
replaced reference comments by extracted comments in PO file

- - - - -
89c6116f by Georges Khaznadar at 2024-11-22T11:16:13+01:00
more .phony targets

- - - - -
b9457d8a by Georges Khaznadar at 2024-11-22T11:20:55+01:00
taken in account <emphasize> tags

- - - - -
12d364ca by Georges Khaznadar at 2024-11-22T12:36:22+01:00
progress in FR translation

- - - - -
672b2c57 by Georges Khaznadar at 2024-11-22T12:36:54+01:00
taking in accoutn <emphasis>

- - - - -
4a0bb819 by Georges Khaznadar at 2024-11-22T15:56:20+01:00
fixed a few inconsistencies

- - - - -
e42b99b5 by Georges Khaznadar at 2024-11-22T17:59:11+01:00
do not apply <package> for chnks like "tested inside the subset"

- - - - -
3b4c8cbf by Georges Khaznadar at 2024-11-22T18:26:19+01:00
fixed inconsistencies

- - - - -
b8b9c886 by Georges Khaznadar at 2024-11-22T18:53:13+01:00
progress in FR translation

- - - - -
10a18020 by Georges Khaznadar at 2024-11-22T19:34:19+01:00
progress in FR translation

- - - - -
a12ac4f5 by Georges Khaznadar at 2024-11-23T19:58:52+01:00
words like "in the" should not be part of a ulink's anchor

- - - - -
e8934a51 by Georges Khaznadar at 2024-11-23T20:24:29+01:00
progress in FR translation

- - - - -
cafbaae2 by Georges Khaznadar at 2024-11-24T00:19:54+01:00
progress in FR translation

- - - - -
98956f35 by Georges Khaznadar at 2024-11-24T11:35:41+01:00
progress in FR translation

- - - - -
f0cdbbbc by Georges Khaznadar at 2024-11-24T11:48:24+01:00
progress in FR translation

- - - - -
1d8e338d by Georges Khaznadar at 2024-11-24T12:32:46+01:00
progress in FR translation

- - - - -
fd54df05 by Georges Khaznadar at 2024-11-24T13:40:05+01:00
progress in FR translation

- - - - -
3f17f291 by Georges Khaznadar at 2024-11-24T20:15:54+01:00
progress in FR translation

- - - - -
07497255 by Georges Khaznadar at 2024-11-25T10:35:38+01:00
progress in FR translation

- - - - -
6a923ab7 by Georges Khaznadar at 2024-11-25T16:16:24+01:00
dirty trick, to disambiguate "a" which also appears in 06_technology.xml

- - - - -
fba0538d by Georges Khaznadar at 2024-11-25T16:30:52+01:00
progress in FR translation

- - - - -
d9b72b60 by Georges Khaznadar at 2024-11-25T16:52:43+01:00
progress in FR translation

- - - - -
69dd0d2e by Georges Khaznadar at 2024-11-27T20:14:45+01:00
progress in FR translation

- - - - -
d2c0b0a1 by Georges Khaznadar at 2024-11-28T18:08:29+01:00
progress in FR translation

- - - - -
c225c412 by Georges Khaznadar at 2024-11-28T18:08:43+01:00
progress in FR translation

- - - - -
cebf9ce5 by Georges Khaznadar at 2024-11-29T18:51:17+01:00
progress in FR translation

- - - - -
60a6b90d by Georges Khaznadar at 2024-11-29T19:33:57+01:00
progress in FR translation

- - - - -
00a76a8b by Georges Khaznadar at 2024-11-30T18:34:15+01:00
first FR translation completed

- - - - -
6f0d33dc by Georges Khaznadar at 2024-11-30T19:32:42+01:00
remove remark elements from translated pages

- - - - -
5eceaecc by Andreas Tille at 2024-11-30T21:21:47+00:00
Merge branch 'master' into 'master'

I18N and French L10N

See merge request blends-team/blends!15
- - - - -


12 changed files:

- + devtools/.gitignore
- + devtools/blend-doc-makepot
- + devtools/blend-doc-translate
- + devtools/utils.py
- + doc/.gitignore
- doc/Makefile
- + doc/debian-blends.fr.xml
- doc/en/00_titletoc.xml
- doc/en/07_starting.xml
- doc/en/09_todo.xml
- + doc/fr.po
- + doc/fr/.gitkeeper


Changes:

=====================================
devtools/.gitignore
=====================================
@@ -0,0 +1,2 @@
+*~
+__pycache__/


=====================================
devtools/blend-doc-makepot
=====================================
@@ -0,0 +1,178 @@
+#! /usr/bin/python3
+
+"""
+This program extracts translatable contents from xlm files under
+the subdirectory "doc/", and builds a PO template file with them.
+
+Currently translatable contents are provided by tags
+'title', 'ulink', 'term' and 'para'.
+
+Each entry is prepended a comment with a mean to access the translatable
+text chunk, with xml.etree.ElementTree
+
+How to use this script:
+$ devtools/blend-doc-makepot doc/en > path_to_blends.pot
+"""
+
+import xml.etree.ElementTree as ET
+import sys, re, os, hashlib, collections
+sys.path.append(os.path.dirname(__file__))
+
+from utils import normalizedText
+
+def content(tag):
+    return (tag.text or "") + ''.join(ET.tostring(e, encoding='unicode') for e in tag)
+
+class PotEntry():
+    """
+    Class to implement POT entries.
+
+    Parameters of the constructor:
+    ------------------------------
+
+    - comment (str) a comment a comment to acces the text in a source file
+    - text (str) the original text to process
+    """
+
+    entries = collections.OrderedDict()
+
+    def __init__(self, comment, text):
+        self.comment = comment
+        self.text = "\n".join([
+            f'"{l}"' for l in normalizedText(text, escape=True)])
+        self.hash = hashlib.sha256(self.text.encode("UTF-8")).hexdigest()
+        if self.hash in self.entries:
+            self.entries[self.hash].append(self)
+        else:
+            self.entries[self.hash] = [self]
+        return
+
+    def __str__(self):
+        return """\
+msgid ""
+{self.text}
+msgstr ""
+
+"""
+
+    @staticmethod
+    def header():
+        """
+        Returns a template for the begin of the POT file
+        """
+        return """\
+# LANG translations for Debian Blends documentation.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the blends package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: blender-doc\\n"
+"Report-Msgid-Bugs-To: blender at packages.debian.org\\n"
+"POT-Creation-Date: 2024-11-20 10:11+0200\\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\\n"
+"Language-Team: LANGUAGE <LL at li.org>\\n"
+"Language: \\n"
+"MIME-Version: 1.0\\n"
+"Content-Type: text/plain; charset=UTF-8\\n"
+"Content-Transfer-Encoding: 8bit\\n"
+
+"""
+
+    @staticmethod
+    def entries_str():
+        result = ""
+        for h, list_p in PotEntry.entries.items():
+            comments = "\n".join([f"#. {p.comment}" for p in list_p])
+            text = PotEntry.entries[h][0].text
+            result += f"""
+{comments}
+msgid ""
+{text}
+msgstr ""
+
+"""
+        return result
+
+    @staticmethod
+    def potfile():
+        return f"""
+{PotEntry.header()}
+{PotEntry.entries_str()}
+"""        
+            
+def pot_entries(filename):
+    """
+    collects POT entries from a file
+    
+    Parameter:
+    ----------
+    
+    - filename (str) path to an xml file
+    
+    Returns:
+    --------
+    None
+
+    Side-effects:
+    -------------
+    
+    PotEntry.entries will bear all information collected from the file
+    """
+    tree = ET.parse(filename)
+    root = tree.getroot()
+    for tag in ("title", "ulink", "term", "para"):
+        xpath = ".//" + tag
+        elements = root.findall(xpath)
+        for i, t in enumerate(elements):
+            if t.text and t.text.strip():
+                comment = f'{filename} : root.findall("{xpath}")[{i}].text'
+                _ = PotEntry(comment, t.text)
+            dejavu = {}
+            for e in t:
+                if e.tag in dejavu:
+                    dejavu[e.tag] += 1
+                else:
+                    dejavu[e.tag] = 1
+                xpath2 = f"./{e.tag}[{dejavu[e.tag]}]"
+                if e.tag == "emphasis":
+                    if e.text and e.text.strip():
+                        # it is an emphasis inside some translatable text
+                        # so we must output its text into the POT file
+                        comment = f'''\
+{filename} : root.findall("{xpath}")[{i}].findall("{xpath2}")[0].text'''
+                        _ = PotEntry(comment, e.text)
+                        dejavu_em = {}
+                        for e_em in e:
+                            # we are under one layer of emphasis tag now!
+                            if e_em in dejavu_em:
+                                dejavu_em[e_em.tag] += 1
+                            else:
+                                dejavu_em[e_em.tag] = 1
+                            xpath2_em = f"./{e_em.tag}[{dejavu_em[e_em.tag]}]"
+                            if e_em.tail and e_em.tail.strip():
+                                comment = f'''\
+{filename} : root.findall("{xpath}")[{i}].findall("{xpath2}")[0].findall("{xpath2_em}")[0].tail'''
+                                
+                                _ = PotEntry(comment, e_em.tail)
+                if e.tail and e.tail.strip():
+                    comment = f'''\
+{filename} : root.findall("{xpath}")[{i}].findall("{xpath2}")[0].tail'''
+                    _ = PotEntry(comment, e.tail)
+    return
+
+
+if __name__ == "__main__":
+    # write a POT file to the standard output
+    path = "."
+    if len(sys.argv) > 1 :
+        path = sys.argv[1]
+    for root, dirs, files in os.walk(path):
+        for f in files:
+            if f.endswith(".xml"):
+                filename = os.path.join(root, f)
+                pot_entries(filename)
+    print(PotEntry.potfile())


=====================================
devtools/blend-doc-translate
=====================================
@@ -0,0 +1,96 @@
+#! /usr/bin/python3
+
+"""
+This script translates the documentation.
+<remark> elements are stripped off when translating.
+
+sys.argv[1] must be a supported (non EN) language, which entails using
+doc/{sys.argv[1]}.po and the subdirectory {sys.argv[1]}/
+"""
+
+import gettext
+_ = gettext.gettext
+
+import sys, os, re
+sys.path.append(os.path.dirname(__file__))
+
+from utils import normalizedText
+
+import xml.etree.ElementTree as ET
+from subprocess import call
+
+def usage():
+    print(f"Usage: {sys.argv[0]} <language-code>")
+    sys.exit(1)
+    return # never reached
+
+def translate(source, target = "/tmp/example.xml", docdir = "doc", lang = "fr"):
+    """
+    Translates an XMLDOC file.
+    <remark> elements are stripped off
+
+    Parameters:
+    -----------
+
+    - source (str) the source XML file
+    - target (str) the file to create
+    - docdir (str) the directory which contains MO files and translated subdirs
+    - lang (str) the language code
+    """
+    tree = ET.parse(source)
+    root = tree.getroot()
+    accessors = []
+    with open(os.path.join(docdir, lang + ".po")) as pofile:
+        pattern = re.compile("^#\\. en/" + source.split("/")[-1] + " : (.*)")
+        for l in pofile.readlines():
+            m = pattern.match(l.strip())
+            if m:
+                et = eval('.'.join(m.group(1).split('.')[:-1]))
+                text_tail = m.group(1).split('.')[-1]# either '.text' or '.tail'
+                t = "".join(normalizedText(eval(m.group(1)), escape = False))
+                t = t.replace('\\"', '"')
+                setattr(et, text_tail, _(t))
+    for parent_of_remark in root.findall(".//remark/.."):
+        for remark in parent_of_remark.findall("./remark"):
+            parent_of_remark.remove(remark)
+            print("+----------- Removing a remark: ---------------")
+            for l in remark.text.split("\n"):
+                print("|", l)
+            print("+----------------------------------------------")
+    with open(target, "w") as outfile:
+        tree.write(outfile, encoding='unicode')
+    call(['/usr/bin/xmllint', '--format', target,
+          "--output", target + ".tmp",
+          "--encode", "UTF-8"])
+    call(['mv', target + ".tmp", target])
+    return
+    
+if __name__ == "__main__":
+    if len(sys.argv) < 2:
+        usage()
+    l = sys.argv[1].lower()
+    print(f"translating --> {l}")
+    docdir = None
+    pofile = None
+    for root, dirs, files in os.walk("."):
+        if f"{l}.po" in files:
+            pofile = os.path.join(root, f"{l}.po")
+            docdir = root
+    if not pofile:
+        raise Exception(f"ERROR: The path to {l}.po was not found.")
+    # l, docdir and pofile are defined
+    os.environ['LANG'] = l
+    gettext.bindtextdomain("blends", localedir=docdir)
+    gettext.textdomain('blends')
+    
+    for root, dirs, files in os.walk(os.path.join(docdir, "en")):
+        for f in files:
+            if f.endswith(".xml"):
+                filename = os.path.join(root, f)
+                target = os.path.join(docdir, l, f)
+                print(f"Translating: {filename} --> {target}")
+                translate(
+                    filename,
+                    target = target,
+                    docdir = docdir, lang = l,
+                )


=====================================
devtools/utils.py
=====================================
@@ -0,0 +1,43 @@
+import re
+
+def normalizedText(t, n=68, escape = False):
+    """
+    Given a text with newlines and multiple spaces, reduces all
+    multiple separators to single spaces,
+    and returns a string with not too long lines.
+
+    Parameters:
+    -----------
+    
+    - t (str) a text to normalize
+    - n (int) the maximum length of a line, when possible. Defaults to 68.
+    - escape (bool): if True, double quotes will be escaped. Deffauts to False
+    """
+    if not t:
+        return ""
+    onestring = re.sub("[\\s\n\t]+",  " ", t, flags=re.MULTILINE)
+    if escape:
+        # escape double quotes
+        onestring = onestring.replace('"', '\\"')
+    foundspace=0
+    last_foundspace=0
+    pos=0
+    newline_pos = [0]
+    while pos < len(onestring):
+        if onestring[pos] == " ":
+            foundspace = pos
+            if pos - newline_pos[-1] >= n:
+                if last_foundspace > newline_pos[-1]:
+                    newline_pos.append(last_foundspace+1)
+                    pos = last_foundspace + 1
+                    foundspace = pos
+                else:
+                    newline_pos.append(foundspace+1)
+            last_foundspace = foundspace
+        pos += 1
+    result = []
+    for i in range(1, len(newline_pos)):
+        result.append(onestring[newline_pos[i-1]:newline_pos[i]])
+    result.append(onestring[newline_pos[-1]:])
+    return result
+


=====================================
doc/.gitignore
=====================================
@@ -0,0 +1,6 @@
+*~
+*.pot
+*.mo
+en/html/
+fr/html/
+fr/*.xml


=====================================
doc/Makefile
=====================================
@@ -4,9 +4,14 @@
 
 ## ----------------------------------------------------------------------
 ## Document definitions
-doc_lang	:= en
+doc_lang	:= en fr
 doc_name	:= debian-blends
 doc_xml	:= $(shell for l in $(doc_lang); do echo $(doc_name).$$l.xml; done)
+doc_xml_source := $(shell find $$l -name "*.xml")
+po_files := $(shell ls *.po)
+mo_files := $(patsubst %.po, %/LC_MESSAGES/blends.mo, $(po_files))
+translated := $(shell for l in $$(echo $(doc_lang) | sed 's/en//'); do for f in en/*.xml; do echo $$l/$$(basename $$f); done; done)
+
 sources := $(shell find . -name "*.xml")
 doc_pdf	:= $(shell for l in $(doc_lang); do echo $$l/pdf/$(doc_name).$$l.pdf; done)
 doc_ps	:= $(shell for l in $(doc_lang); do echo $$l/ps/$(doc_name).$$l.ps; done)
@@ -21,6 +26,8 @@ pkg      := blends-doc
 
 doc_html_en := en/html
 doc_pdf_en  := en/pdf/debian-blends.en.pdf
+doc_html_fr := fr/html
+doc_pdf_fr  := fr/pdf/debian-blends.en.pdf
 
 ## ----------------------------------------------------------------------
 ## General definitions
@@ -46,7 +53,32 @@ validate: $(doc_xml)
 	  xmllint --valid --noout $$f; \
 	done
 
-html: $(doc_html)
+update_po: $(po_files)
+
+blends.pot: $(doc_xml_source)
+	../devtools/blend-doc-makepot en > $@
+
+$(po_files): blends.pot
+	@for l in $(doc_lang); do \
+	  [ $$l != "en" ] && echo -n "Updating $$l.po " && \
+	  mkdir -p $$l/LC_MESSAGES && \
+	  msgmerge -U $$l.po blends.pot; \
+	done
+
+update_mo: $(mo_files)
+
+$(mo_files): $(po_files)
+	@for l in $$(echo $(doc_lang)| sed 's/en//'); do \
+	  echo "Updating $$l/LC_MESSAGES/blends.mo" && \
+	  msgfmt -o $$l/LC_MESSAGES/blends.mo $$l.po; \
+	done
+
+translate: $(mo_files)
+	@for l in $(doc_lang); do \
+	  [ $$l != "en" ] && ../devtools/blend-doc-translate $$l; \
+	done
+
+html: translate $(doc_html)
 
 $(doc_html) $(doc_html_en): $(doc_xml) $(sources)
 	for l in $(doc_lang); do \
@@ -55,14 +87,14 @@ $(doc_html) $(doc_html_en): $(doc_xml) $(sources)
 	  $(LOCALE) xmlto --skip-validation -o $$d -x $(doc_name).xsl html $$f; \
 	done
 
-txt $(doc_txt): $(doc_xml)
+txt $(doc_txt): translate $(doc_xml)
 	for l in $(doc_lang); do \
 	  f=$(doc_name).$$l.xml; d=$$l/txt; \
 	  mkdir -p $$d; \
 	  $(LOCALE) xmlto --skip-validation $(doc_txt_params) -o $$d txt $$f; \
 	done
 
-ps $(doc_ps): 	$(doc_xml)
+ps $(doc_ps): translate	$(doc_xml)
 	for l in $(doc_lang); do \
 	  f=$(doc_name).$$l.xml; d=$$l/ps; \
 	  mkdir -p $$d; \
@@ -70,7 +102,7 @@ ps $(doc_ps): 	$(doc_xml)
 	done
 
 
-pdf $(doc_pdf): $(doc_xml)
+pdf $(doc_pdf): translate $(doc_xml)
 	for l in $(doc_lang); do \
 	  f=$(doc_name).$$l.xml; d=$$l/pdf; \
 	  mkdir -p $$d; \
@@ -78,7 +110,7 @@ pdf $(doc_pdf): $(doc_xml)
 	done
 
 
-dvi $(doc_dvi): $(doc_xml)
+dvi $(doc_dvi): translate $(doc_xml)
 	for l in $(doc_lang); do \
 	  f=$(doc_name).$$l.xml; d=$$l/dvi; \
 	  mkdir -p $$d; \
@@ -98,9 +130,10 @@ clean:
 	    $(RMR) $$l/$$d; \
 	  done; \
 	done
-	find . -name "*~" -exec $(RMR) {} \;
+	find . -name "*~" -o name "*.mo" -exec $(RMR) {} \;
+	rm -f blends.pot
 
 distclean:
 		make clean
 
-.PHONY: all publish clean distclean validate
+.PHONY: all publish clean distclean validate translate update_mo update_po


=====================================
doc/debian-blends.fr.xml
=====================================
@@ -0,0 +1,41 @@
+<?xml version='1.0' ?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V5.0a1//EN"
+                    "/usr/share/xml/docbook/schema/dtd/4.5/docbookx.dtd" [
+	
+	<!-- textual data entities -->
+	<!ENTITY titletoc			SYSTEM "fr/00_titletoc.xml">
+	<!ENTITY ch-introduction	SYSTEM "fr/01_introduction.xml">
+	<!ENTITY ch-about			SYSTEM "fr/02_about.xml">
+	<!ENTITY ch-general-ideas	SYSTEM "fr/03_general_ideas.xml">
+	<!ENTITY ch-existing-blends	SYSTEM "fr/04_existing_blends.xml">
+	<!ENTITY ch-inside          SYSTEM "fr/05_inside.xml">
+	<!ENTITY ch-technology		SYSTEM "fr/06_technology.xml">
+	<!ENTITY ch-starting        SYSTEM "fr/07_starting.xml">
+	<!ENTITY ch-websentinel     SYSTEM "fr/08_websentinel.xml">
+	<!ENTITY ch-todo            SYSTEM "fr/09_todo.xml">
+	<!ENTITY ap-devel           SYSTEM "fr/A_devel.xml">
+	<!ENTITY ap-quickintro      SYSTEM "fr/B_quickintro.xml">
+	<!ENTITY ap-bts             SYSTEM "fr/C_bts.xml">
+	<!ENTITY ap-faq             SYSTEM "fr/D_faq.xml">
+   
+]>
+
+<book id="debiandoc-xml">   
+    &titletoc;
+
+    &ch-introduction;
+    &ch-about;
+    &ch-general-ideas;
+    &ch-existing-blends;
+    &ch-inside;
+    &ch-technology;
+    &ch-starting;
+    &ch-websentinel;
+    &ch-todo;
+
+    &ap-devel;
+    &ap-quickintro;
+    &ap-bts;
+    &ap-faq;
+  
+</book>


=====================================
doc/en/00_titletoc.xml
=====================================
@@ -48,8 +48,8 @@
 	    </para>
 	    
 	    <para>
-	      You can find the source of this article 
-	      <ulink url="https://salsa.debian.org/blends-team/blends/-/tree/master/doc">in the Git repository at salsa.debian.org</ulink>.
+	      You can find the source of this article in the
+	      <ulink url="https://salsa.debian.org/blends-team/blends/-/tree/master/doc">Git repository at salsa.debian.org</ulink>.
 	      It is also available as Debian package <package>blends-doc</package>.
 	    </para>
 


=====================================
doc/en/07_starting.xml
=====================================
@@ -200,7 +200,8 @@ written by Ben Armstrong <email>synrg at debian.org</email>.
 <sect2>
   <title>Repository</title>
   <para>
-  On <ulink url="https://salsa.debian.org/">salsa.debian.org</ulink> a
+    On <ulink url="https://salsa.debian.org/">salsa.debian.org</ulink> a
+    particular
   <ulink url="https://gitlab.com/">GitLab</ulink> instance is running to host
   all Debian related project work.  Creating a project on Salsa is a
   good idea to start teamwork on the code a Debian Pure Blend is


=====================================
doc/en/09_todo.xml
=====================================
@@ -17,23 +17,19 @@ to this list or read the list archive</ulink>.
 Moreover the project <ulink url="https://salsa.debian.org/blends-team">
 Blends</ulink> on Salsa exists to organise the cooperation of developers.
 The <ulink url="https://salsa.debian.org/blends-team/blends">Git repository</ulink>
-can be browsed or checked out by by
+can be browsed or checked out by
 <informalexample>
   <programlisting>
   git clone https://salsa.debian.org/blends-team/blends.git
 </programlisting>
 </informalexample>
-<programlisting>
 for anonymous users. Developers should check out via
-</programlisting>
 <informalexample>
   <programlisting>
   gbp clone git at salsa.debian.org:blends-team/blends.git
 </programlisting>
 </informalexample>
-<programlisting>
 The current layout for the repository is as follows:
-</programlisting>
 <informalexample>
   <programlisting>
   blends -+- blends (code of blends-dev and this documentation)
@@ -314,8 +310,8 @@ process which propagates packages to <package>testing</package> and releasing a
 complete <package>stable</package> distribution also remains untouched.  The new
 thing is that the package pool could be enhanced to store more package
 versions which belong to certain subsets alias Debian Pure Blends
-which all have a set of <package>tested inside the subset</package> distribution
-which leads to a <package>stable</package> subset release.  The following graph
+which all have a set of <emphasis>tested inside the subset</emphasis> distribution
+which leads to a <emphasis>stable</emphasis> subset release.  The following graph
 might clarify this:
 
 <informalexample>
@@ -394,10 +390,8 @@ DD -> unstable --> testing --> releasable --> stable
                                    +--->  ...
   </programlisting>
 </informalexample>
-<programlisting>
 A third suggestion was given at Congreso Software Libre Comunidad
 Valenciana:
-</programlisting>
 <informalexample>
 <programlisting>
            testing_proposed_updated


=====================================
doc/fr.po
=====================================
The diff for this file was not included because it is too large.

=====================================
doc/fr/.gitkeeper
=====================================
@@ -0,0 +1 @@
+keep the directory



View it on GitLab: https://salsa.debian.org/blends-team/blends/-/compare/749c9e72e7541a3a3f7df310e43b4cca297512b4...5eceaecc93648239914b45d53c5aeee2c335b594

-- 
View it on GitLab: https://salsa.debian.org/blends-team/blends/-/compare/749c9e72e7541a3a3f7df310e43b4cca297512b4...5eceaecc93648239914b45d53c5aeee2c335b594
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/blends-commit/attachments/20241130/f0831817/attachment-0001.htm>


More information about the Blends-commit mailing list