Skip to content

Instantly share code, notes, and snippets.

@vv01f
Last active August 29, 2015 14:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vv01f/ef17d5ead87512d6f70a to your computer and use it in GitHub Desktop.
Save vv01f/ef17d5ead87512d6f70a to your computer and use it in GitHub Desktop.
Freifunk und Trouismus, Mehrsprachigkeit für freifunk-dresden

Mehrsprachigkeit für Freifunk-Dresden

Freifunk Dresden / DDmesh


Inhaltsverzeichnis

Vorüberlegungen

Aufgrund des Ansatzes Friefunk auch für den Tourismus zu nutzen ist die Deutsche Sprache allein nur bedingt geeignet z.B. die Nutzungsbedingungen zu vermitteln. Daher soll zunächst Englisch als zweite und sehr weit verbreitete Sprache angeboten werden.

Die Sprache des Browsers wird üblicherweise in einer Variable an den Webserver übermittelt und kann helfen einen guten Standard auszuwählen.

Es wäre denkbar die Übersetzung durch einen entsprechenden Dienst (z.B. Google Translator) automatisiert erfolgen zu lassen.

Nachteile

  • Rechtsunsicherheit,
  • Zentraler Dienst,
  • Maschinelle Übersetzung ist sehr fehleranfällig

Vorteile

  • Sehr viele Sprachen werden unterstützt,
  • Änderungen müssen nicht manuell gepflegt werden

Beurteilung

  • Optional nach Nutzeraktion;
  • Rechtsunsicherheit wird damit begegent dass zunächst eine eigene Version angezeigt wird und der fremde Dienst nur nach Zustimmung des Nutzers aktiv wird.

Maßnahmen

  1. Eigene Englische Übersetzung der Standard-NB neben der Deutschen Version
  2. Browser-Sprache auswerten um einen guten Default zu wählen
  3. Script in /www/index.cgi anpassen und flexibilisieren um weitere Übersetzungen zu ermöglichen
  4. Dynamischen Übersetzer als Option einbinden

Die eigene Übersetzung

1. Eigenverantwortung für Ersteller

Der wichtigste Punkt sind die manuellen Übersetzungen. Da der Nutzer diese ohne Aufforderung vorgelegt bekommt ist die Qualität nicht zu vernachlässigen und insb. der Haftungsausschluss von Bedeutung für den einzelnen Betreiber.

Deshalb sollte auch über die Anpassbarkeit der Dateien in der Verwaltung nachgedacht werden.

2. Sprachdateien

Deutsche Datei umbenennen

mv /usr/lib/ddmesh/agreement.txt /usr/lib/ddmesh/agreement-de.txt
Beispiel Deutsche Datei:

(Deutsche) Version (hier /usr/lib/ddmesh/agreement-de.txt)

                    [ Nutzungsbedingungen ] Deutsche Version
1. Allgemeines
--------------
Das offene und freie drahtlose Freifunk.net wird von Freiwilligen betrieben ("Betreiber"), die die nötigen Geräte und Internet-Anschlüsse ("Infrastruktur") auf eigene Kosten zur Verfügung stellen. Diese Nutzungsbestimmungen regeln die Inanspruchnahme des Freifunk.net durch die Teilnehmer, welche sich mittels Computer, Handheld o.a. ("Endgerät") mit dem Freifunk.net verbinden.

2. Zugang
---------
Der Zugang zum Freifunk.net wird nicht garantiert. Er kann jederzeit und ohne Angabe von Gründen unterbrochen oder für bestimmte Endgeräte und Teilnehmer gesperrt werden. Der Zugang und die notwendigen Daten zum Verbinden mit dem Netz werden durch die Knoten definiert und per DHCP oder ähnlichen Protokollen an die Endgeräte übertragen. Das Verwenden von alten, ungültigen oder selbst definierten Daten (z.B. IP Adresse) ist nicht gestattet, da diese das Netz stören oder beschädigen können. Durch die Funktionsweise des Netzes ist es nicht vorhersehbar, welcher Router für den Internetzugang verwendet wird.  

3. Gesetzlich verbotene Handlungen
----------------------------------
Der Teilnehmer verpflichtet sich, keine Handlungen vorzunehmen bzw. Handlungen zu unterlassen, welche gesetzliche Bestimmungen oder die Rechte anderer verletzen.

4. Gesetzlich verbotene Inhalte
-------------------------------
Der Teilnehmer verpflichtet sich, keine Inhalte über das Freifunk.net zu übertragen, welche gegen geltendes Recht verstossen.

5. Verantwortung
----------------
Die Betreiber des Freifunk.net Netzwerkes sind nicht verantwortlich für die übertragenen Daten oder durch Missbrauch entstandenen Schäden. Sie stellen nur das Netzwerk und Zugang zum Netz bereit. Die Verantwortung trägt der Nutzer, der mit dem Endgerät das Netz nutzt, welcher diese Nutzungsbestimmungen akzepiert hat. Wer sich Zugang zum Netz verschafft, ohne die Nutzungsbedingungen zu akzeptieren, macht sich strafbar.

6. Datenprotokollierung
-----------------------
Netzwerk/Router speichert keine Daten, sondern leitet diese nur über Router weiter. Ebenso werden keine Logindaten gespeichert. Es werden nur die MAC Adresse des Endgerätes im RAM des Zugangsknoten (Router) gepeichert, um den Zugang über den jeweiligen Router zuermöglichen. Es ist jedoch möglich bei Verdacht des Missbrauches (z.B. illegaler Datenaustausch, Surfen auf illegalen Seiten, Austausch von kopiergeschützen Inhalten und anderes, was gegen geltendes Recht verstößt) auf Verlangen Daten entsprechend technischer Möglichkeiten zu speichern, die dann weitergegeben werden. 

7. Fair Use Policy
------------------
Der Teilnehmer verpflichtet sich, das Freifunk.net nicht in einer Weise zu beanspruchen, welche die Infrastruktur, das Freifunk.net selbst, dessen Betreiber oder andere Teilnehmer beinträchtigt.

8. Sicherheit
-------------
Das Freifunk.net ist, wie das Internet, unverschlüsselt und offen. Jeder Teilnehmer ist selbst für die Sicherheit seiner Verbindungen und seiner Endgeräte verantwortlich.

9. Haftungsauschluss
--------------------
Die Betreiber lehnen jede Haftung für Datenverlust, unbefugter Zugriff auf Endgeräte, Schäden an Endgeräten oder finanzielle Verluste die ein Teilnehmer durch die Nutzung des Freifunk.net erleidet ab.

ggf. Englische Datei als Kopie angelegen und selbst übersetzen

Kopieren:

cp /usr/lib/ddmesh/agreement-de.txt /usr/lib/ddmesh/agreement-en.txt
Beispiel Englische Datei:

(Englische) Übersetzung (hier /usr/lib/ddmesh/agreement-en.txt) anfertigen oder übertragen

                    [ Terms of Use ] - English
1. In General
--------------
The open and free wireless Freifunk.net is operated by volunteers.
All devices and internet connections (incl. infrastructure) are paid on their costs.
This user agreement settles for the use of Freifunk.net by participants that connect to it.

2. Access
---------
Access to Freifunk.net is not guaranteed.
It can be interrupted at any time without notice for any reason or blocked for specific devices and participants.
The access and the necessary data to connect to the network are defined by the node and transmitted to the terminals via DHCP or similar protocols.
Using old, invalid or user-defined data (e.g. IP address) is not permitted, as these may disrupt the network or cause damage.
Through the operation of the network it is impossible to predict which router is used for Internet access.

3. Legally prohibited acts
----------------------------------
The participant agrees to take no action or to refrain from acts which violate the law or the rights of others.

4. Legally forbidden contents
-------------------------------
The participant agrees not to transmit any content via Freifunk.net which violate the law.

5. Responsibility
----------------
The operators of the network Freifunk.net are not responsible for the data transmitted or resulting damage.
They represent only the network and provide access it.
Responsibility lies with the user who uses the network and accepts these Terms of Use. Those who access the network without accepting the Terms of Use are liable to prosecution.

6. Logging
-----------------------
Network / router do not store data, but forwards them via routers. Similarly, no log data is stored.
MAC addresses of network devices are stored in the RAM and caches of routers to provide the necessary network funktionality only.
However, it is possible - with suspicion of abuse (eg, illegal data sharing, surfing on illegal sites, exchange of copy protected content, and another, which is against the law) - upon request by authorities that data is stored and passed on as technically possible.

7. Fair Use Policy
------------------
The participant agrees not to use Freifunk.net in a way that have adverse effect on infrastructure, Freifunk.net even its operator or other participants.

8. Security
-------------
The Freifunk.net is open and therefore unencrypted intentionally.
Each participant is responsible for the security of its connections and its devices.

9. Disclaimer: No warranty of any kind
--------------------
The operator accepts no liability; including loss of data, unauthorized access, damage to terminals/devices or financial loss a subscriber suffers from by using Freifunk.net.

Schema für die Sprachdateien

Das Schema für den Dateinamen mit der Sprache ${lang} ist:

agreement-${lang}.txt

${lang} ist eines der in Browsern für HTTP_ACCEPT_LANGUAGE üblichen zweistelligen Kürzel (s. ISO 639-1) Länderspezifika wurden für unseren Zweck nicht betrachtet.

Um ggf. automatisiert Details über die Dateien verwenden zu können beinhaltet die erste Zeile der Datei:

  • den Dokumententitel in eckigen Klammern,
  • den Namen der Sprache auf Englisch
  • und optional in der Sprache selbst wie hier nochmal am dt. Beispiel zu sehen:
[ Nutzungsbedingingen ] German / Deutsch

Umgebende Whitespaces werden ignoriert, maßgeblich sind die Trennzeichen.

3. Inhalt der Datei /www/index.cgi anpassen

Standardmäßig wird die Sprache des Browsers betrachtet. Wenn JavaScript aktiv ist, kann mit Steuerelementen zusätzlich zwischen den Sprachen gewechselt werden.

<legend id="tou-title">Nutzungsbestimmungen</legend>
<div id="js-warning" style="color:red;background:yellow;border:2px solid red;"><big>JavaScript inaktiv</big><br>Ohne JavaScript stehen zus&auml;tzliche Funktionen nicht zur Verf&uuml;gung.</div>
EOM

	#sed used for string2lower as tr cannot use :lower: and :upper: in current busybox-version, a-z is sufficient here for the language tags but might not be for text of languages with special characters
	tmp_langbrowser=$(echo $HTTP_ACCEPT_LANGUAGE|cut -d- -f1|cut -d, -f1|sed 'y/[ABCDEFGHIJKLMNOPQRSTUVWXYZ]/[abcdefghijklmnopqrstuvwxyz/')
	echo "<div id=\"tou-langbox\" style=\"display:none;\">Choose Language / Sprache w&auml;hlen: "
	#iterate over files so that more languages might be added easily with a single file (langpack)
	for i in $(ls /usr/lib/ddmesh/agreement-??.txt); do
	  tmp_lang=$(echo $i|cut -d- -f2|cut -d. -f1)
	  #check if lang is browserlang; when none yet keep the first
	  if [ -z $tmp_langdef ]; then
	    tmp_langdef=$tmp_lang
	  fi
	  if [ $tmp_lang == $tmp_langbrowser ]; then
	    tmp_langdef=$tmp_lang
	  fi
	  #add button
	  echo "<input type=\"button\" value=\""$tmp_lang"\" onclick=\"changecontent('"$tmp_lang"');\">"
	  #add hidden text
	  echo "<div style=\"display:none;\" id=\"agreement-"$tmp_lang"\" lang=\""$tmp_lang"\">"
	  echo "$(cat /usr/lib/ddmesh/agreement-${tmp_lang}.txt)"
	  echo "</div>"
	done
	echo "</div>"
	#add default text
	echo "<textarea cols=\"80\" rows=\"30\" readonly wrap=\"virtual\" id=\"agreement\">"
	echo $'\n'"$(cat /usr/lib/ddmesh/agreement-${tmp_langdef}.txt)"
	echo "</textarea>"

cat<<EOM
</fieldset>
<script>
	function changecontent(l){
	  d=document;
	  if( l.length <= 2 && d.getElementById('agreement-'+l).innerHTML.length > 10 ){
	    d.getElementById('agreement').innerHTML=d.getElementById('agreement-'+l).innerHTML;
	  }
	}
	//enable visibility of langbox
	document.getElementById('tou-langbox').style.display='block';
	document.getElementById('js-warning').style.display='none';
</script>

Dynamischen Übersetzer einbinden

2. Für den Header der index.cgi muss ergänzt werden:

<meta name="google-translate-customization" content="*token removed, place yours here*">

Die Ablage wird in der Datei

erfolgen.

3. Und der Code (die Vorgabe kann sich schnell ändern wenn G was bastelt) muss zum Nachladen vorbereitet werden:

<div id="google_translate_element"></div><script type="text/javascript">
function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'de', multilanguagePage: true}, 'google_translate_element');
}
</script><script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>

Die Ablage wird in der Datei

erfolgen.

4. Das Nachladen wird wieder durch JavaScript ermöglicht.

#place js-warning
#load encoded Google-Code as placing hidden is not sufficient to stop autom. execution
#add JS for decoding and place Google Code so it can be executed
#hide js-warning

...tbc...

Weitere Ideen

  • Verwaltung / Eintragen des Tokens für Google
  • Verwaltung / Anpassen der Sprachdatein
  • Bereitstellung als Paket (languagepack)
@ddmesh
Copy link

ddmesh commented Jul 13, 2014

Ich würde die Sprachunterstützung einfach halten und nur Deutsch und Englisch für die vom Splash-Screen erreichbaren Text anbieten. Mit der Google-Translation bringen wir evt zu viele Abhänigkeiten an eine Verfügbare Verbindung zu Google rein (was auch bei der Map der fall ist). Problem ist auch, dass ich kaum noch Speicher im Router habe. Es stehen derzeit nur etwa 128kbyte noch für die Firmware bereit. Das jffs2 Filesystem, welches die Konfiguration, custom html enthält, muss mind. 5*64kbyte sein, da sonst der Router nicht mehr startet. Da aber bereit der Trunk von openwrt gegenüber 12.09 auch mehr Flashspeicherbedarf hat, fehlen mir im Trunk 64k gegenüber dem 12.09er Branch. Beabsichtigt ist, dass das alte Routingprotokoll bmxd in zukunft durch IPv6 Variante bmx6 ersetzt wird. bmx6 und die IPV6 Unterstützung benötigt noch mehr Platz. Ich habe hier nur noch weniger als 64kbyte für eigene Zwecke in der Firmware übrig. Das ist dann so knapp, dass teilweise schon in der Entwicklung, der Router nicht mehr die Mindestgröße von jffs2 Filesystem verfügbar war.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment