Merge remote-tracking branch 'gravitystorm/form-layout' into form-layout
authorRichard Fairhurst <richard@systemeD.net>
Sun, 4 Mar 2012 15:12:48 +0000 (15:12 +0000)
committerRichard Fairhurst <richard@systemeD.net>
Sun, 4 Mar 2012 15:12:48 +0000 (15:12 +0000)
105 files changed:
README.txt
build.properties.template
build.xml
l10n/locale/ast/help_dialog.properties [new file with mode: 0644]
l10n/locale/ast/p2_main.properties [new file with mode: 0644]
l10n/locale/br/help_dialog.properties [new file with mode: 0644]
l10n/locale/br/p2_main.properties [new file with mode: 0644]
l10n/locale/de_DE/help_dialog.properties
l10n/locale/de_DE/p2_main.properties
l10n/locale/en_GB/help_dialog.properties
l10n/locale/en_GB/p2_main.properties
l10n/locale/en_US/help_dialog.properties
l10n/locale/en_US/p2_main.properties
l10n/locale/es_ES/help_dialog.properties [new file with mode: 0644]
l10n/locale/es_ES/p2_main.properties [new file with mode: 0644]
l10n/locale/fi/p2_main.properties [new file with mode: 0644]
l10n/locale/fr_FR/help_dialog.properties
l10n/locale/fr_FR/p2_main.properties
l10n/locale/he/help_dialog.properties [new file with mode: 0644]
l10n/locale/he/p2_main.properties [new file with mode: 0644]
l10n/locale/hsb/help_dialog.properties [new file with mode: 0644]
l10n/locale/hsb/p2_main.properties [new file with mode: 0644]
l10n/locale/ja_JP/help_dialog.properties [new file with mode: 0644]
l10n/locale/ja_JP/p2_main.properties [new file with mode: 0644]
l10n/locale/mk/help_dialog.properties [new file with mode: 0644]
l10n/locale/mk/p2_main.properties [new file with mode: 0644]
l10n/locale/ms/help_dialog.properties [new file with mode: 0644]
l10n/locale/ms/p2_main.properties [new file with mode: 0644]
l10n/locale/nb_NO/help_dialog.properties [new file with mode: 0644]
l10n/locale/nb_NO/p2_main.properties [new file with mode: 0644]
l10n/locale/nl_NL/help_dialog.properties [new file with mode: 0644]
l10n/locale/nl_NL/p2_main.properties [new file with mode: 0644]
l10n/locale/nn_NO/help_dialog.properties [new file with mode: 0644]
l10n/locale/nn_NO/p2_main.properties [new file with mode: 0644]
l10n/locale/no_NO [new symlink]
l10n/locale/pl_PL/help_dialog.properties
l10n/locale/pl_PL/p2_main.properties
l10n/locale/ru/help_dialog.properties [new file with mode: 0644]
l10n/locale/ru/p2_main.properties [new file with mode: 0644]
l10n/locale/sq/help_dialog.properties [new file with mode: 0644]
l10n/locale/tr/p2_main.properties [new file with mode: 0644]
l10n/locale/vi/help_dialog.properties [new file with mode: 0644]
l10n/locale/vi/p2_main.properties [new file with mode: 0644]
l10n/locale/vi_VN/help_dialog.properties [new file with mode: 0644]
l10n/locale/vi_VN/p2_main.properties [new file with mode: 0644]
l10n/locale/zh_CN/p2_main.properties [new file with mode: 0644]
l10n/map/LocalizationMap.mxml
lib/Framework_BabelFx-2.0.4.swc [new file with mode: 0644]
lib/Framework_BabelFx-g400a96.swc [deleted file]
lib/ant-contrib-1.0b3.jar [new file with mode: 0644]
net/systemeD/controls/Spinner.as [new file with mode: 0644]
net/systemeD/halcyon/DebugURLRequest.as
net/systemeD/halcyon/JSController.as
net/systemeD/halcyon/Map.as
net/systemeD/halcyon/MapEvent.as
net/systemeD/halcyon/TileSet.as
net/systemeD/halcyon/connection/Connection.as
net/systemeD/halcyon/connection/Entity.as
net/systemeD/halcyon/connection/StatusFetcher.as
net/systemeD/halcyon/connection/Trace.as
net/systemeD/halcyon/connection/XMLBaseConnection.as
net/systemeD/halcyon/connection/XMLConnection.as
net/systemeD/halcyon/connection/bboxes/Box.as [new file with mode: 0755]
net/systemeD/halcyon/connection/bboxes/FetchSet.as [new file with mode: 0644]
net/systemeD/halcyon/connection/bboxes/Interval.as [new file with mode: 0755]
net/systemeD/halcyon/styleparser/CSSTransform.as [new file with mode: 0644]
net/systemeD/halcyon/styleparser/InstructionStyle.as
net/systemeD/halcyon/styleparser/RuleSet.as
net/systemeD/halcyon/styleparser/Style.as
net/systemeD/halcyon/styleparser/StyleChooser.as
net/systemeD/halcyon/styleparser/TagValue.as [new file with mode: 0644]
net/systemeD/potlatch2/BackgroundSelector.mxml
net/systemeD/potlatch2/EditController.as
net/systemeD/potlatch2/StyleSelector.mxml
net/systemeD/potlatch2/TagViewer.mxml
net/systemeD/potlatch2/VectorSourceDialog.mxml
net/systemeD/potlatch2/controller/ControllerState.as
net/systemeD/potlatch2/controller/DrawWay.as
net/systemeD/potlatch2/controller/NoSelection.as
net/systemeD/potlatch2/controller/SelectedMultiple.as
net/systemeD/potlatch2/controller/SelectedPOINode.as
net/systemeD/potlatch2/controller/SelectedWay.as
net/systemeD/potlatch2/help/HelpDialog.mxml
net/systemeD/potlatch2/help/VideoPlayer.mxml
net/systemeD/potlatch2/mapfeatures/Feature.as
net/systemeD/potlatch2/mapfeatures/editors/RelationMemberEditorFactory.as
net/systemeD/potlatch2/mapfeatures/editors/RestrictionRenderer.mxml
net/systemeD/potlatch2/options/OptionsDialog.mxml
net/systemeD/potlatch2/panels/BackgroundMergePanel.mxml
net/systemeD/potlatch2/panels/BackgroundPanel.mxml
net/systemeD/potlatch2/save/OAuthPanel.mxml
net/systemeD/potlatch2/save/SaveDialog.mxml
net/systemeD/potlatch2/utils/TrackLoader.as
potlatch2.mxml
resources/map_features/buildings.xml
resources/map_features/landuse.xml
resources/potlatch2.html
resources/stylesheets/core_ways.css
resources/stylesheets/potlatch.css
resources/stylesheets/snapshot.css
tests/fakeroot/embedded [new symlink]
tests/src/net/systemeD/halcyon/connection/NodeTest.as
tests/src/net/systemeD/halcyon/connection/actions/AddMemberToRelationActionTest.as
tests/src/net/systemeD/halcyon/connection/actions/JoinNodeActionTest.as
tests/src/net/systemeD/halcyon/connection/actions/SetTagActionTest.as

index dabfc42ada5060d4480c384d5ca769390c3e3ea6..492bb995caaf7a1abecc975448d503e59a27fd19 100644 (file)
@@ -12,7 +12,7 @@ Many icons used in halcyon/potlatch2 are based on the awesome CC0-licensed SJJB
 
 * Flex SDK 4.5
 ** Product page: http://www.adobe.com/products/flex/ 
-** Flex 4 Download page: http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4 (free, OS X/Windows/Linux)
+** Flex 4.5 Download page: http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4.5 (free, OS X/Windows/Linux)
 * AS3 docs - http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/
 * Flash debug player - http://www.adobe.com/support/flashplayer/downloads.html
 * Basically you might as well just sell your soul to Adobe
index 55fcec5af0fdc1c1b6874b08f711ff44438bee6b..d24b9729d79e4821ecde10d90d1cc7d159d0683a 100644 (file)
@@ -19,4 +19,4 @@ test.src.dir = ${basedir}/tests/src
 test.fakeroot.dir = ${basedir}/tests/fakeroot
 test.bin.dir = ${basedir}/tests/bin
 report.dir = ${basedir}/tests/report
-report.html.dir = ${basedir}/tests/report/html
\ No newline at end of file
+report.html.dir = ${basedir}/tests/report/html
index 07e43f6b541ab8ae6c81d99ae574cce3684568c5..7b9ec07688e90108f2076f03ff1a321af5fce6b4 100644 (file)
--- a/build.xml
+++ b/build.xml
@@ -1,4 +1,4 @@
-<project name="Potlatch 2" default="debug">
+<project name="Potlatch 2" default="debug" xmlns:ac="antlib:net.sf.antcontrib">
 
   <!-- load properties from the environment -->
   <property environment="env" />
@@ -9,6 +9,9 @@
   <!-- flexTasks comes with flex, but apparently it's good practice to put in the libs folder -->
   <taskdef resource="flexTasks.tasks" classpath="${basedir}/lib/flexTasks.jar"/>
 
+  <!-- ant-contrib to build multiple locales -->
+  <taskdef uri="antlib:net.sf.antcontrib" resource="net/sf/antcontrib/antlib.xml" classpath="${basedir}/lib/ant-contrib-1.0b3.jar"/>
+
   <!-- if you are running git-svn, you need to run "git tag -a 0.4 0ac0de" where 0ac0de corresponds to the commitid of
       potlatch2 v0.4 . You need to do this for each point release while we're still in SVN.
       If you don't, then expect "git describe" to fail miserably.
   </target>
 
   <!-- note that there's an asdoc target in Flex 4, if/when we move to that -->
-  <target name="docs" depends="manifests">
+  <target name="docs" depends="manifests,makeLocalesList">
     <exec executable="${ASDOC}" failonerror="true">
-      <arg line="-source-path ."/>
-      <arg line="-doc-sources net/systemeD/"/>
+      <arg line="-source-path=."/>
+      <arg line="-doc-sources=net/systemeD/"/>
       <arg line="-external-library-path=lib/"/>
-      <arg line="-target-player 10.0.0"/>
-      <arg line="-exclude-classes ${org_classes} ${it_classes} ${hxasm_classes} ${com_classes}"/>
-      <arg line="-output resources/docs/"/>
-      <arg line="-window-title 'Halcyon and Potlatch2 Developer documentation'" />
-      <arg line="-main-title 'Halcyon and Potlatch2 Developer documentation'" />
-      <arg line="-footer 'Found an error? Help us fix it. http://wiki.openstreetmap.org/wiki/Potlatch2'"/>
+      <arg line="-external-library-path=${FLEX_HOME}/frameworks/libs/"/>
+      <arg line="-external-library-path=${FLEX_HOME}/frameworks/libs/player/10.2/"/>
+      <arg line="-lenient"/>
+      <arg line="-target-player=10.2.0"/>
+      <arg line="-exclude-classes=${org_classes},${it_classes},${hxasm_classes},${com_classes}"/>
+      <arg line="-output=resources/docs/"/>
+      <arg line="-window-title='Halcyon and Potlatch2 Developer documentation'" />
+      <arg line="-main-title='Halcyon and Potlatch2 Developer documentation'" />
+      <arg line="-footer='Found an error? Help us fix it. http://wiki.openstreetmap.org/wiki/Potlatch2'"/>
       <arg line="-package net.systemeD.controls 'Custom-built controls used in Potlatch2'" />
       <arg line="-package net.systemeD.halcyon 'The AS3 rendering library'" />
       <arg line="-package net.systemeD.halcyon.connection 'The connection to the main OSM server, and the entities'" />
@@ -88,7 +94,8 @@
       <arg line="-package net.systemeD.potlatch2.tools 'Data manipulation tools'" />
       <arg line="-package net.systemeD.potlatch2.utils 'Data loading utilities'" />
       
-      <arg line="-left-frameset-width 300" />
+      <arg line="-left-frameset-width=300" />
+      <arg line="-allow-source-path-overlap=true" />
     </exec>
   </target>
 
 
         <fileset id="com_sources" dir="${basedir}/com/" />
         <!-- convert the names of excluded classes to packages with class names -->
-        <pathconvert property="com_classes" pathsep=" " refid="com_sources">
+        <pathconvert property="com_classes" pathsep="," refid="com_sources">
                 <chainedmapper>
                         <globmapper from="${basedir}/*" to="*"/>
                         <mapper type="package" from="*.as" to="*"/>
         <!-- Get the list of all files in the org directory -->
         <fileset id="org_sources" dir="${basedir}/org/" />
         <!-- convert the names of excluded classes to packages with class names -->
-        <pathconvert property="org_classes" pathsep=" " refid="org_sources">
+        <pathconvert property="org_classes" pathsep="," refid="org_sources">
                 <chainedmapper>
                         <globmapper from="${basedir}/*" to="*"/>
                         <mapper type="package" from="*.as" to="*"/>
 
         <fileset id="it_sources" dir="${basedir}/it/" />
         <!-- convert the names of excluded classes to packages with class names -->
-        <pathconvert property="it_classes" pathsep=" " refid="it_sources">
+        <pathconvert property="it_classes" pathsep="," refid="it_sources">
                 <chainedmapper>
                         <globmapper from="${basedir}/*" to="*"/>
                         <mapper type="package" from="*.as" to="*"/>
 
         <fileset id="hxasm_sources" dir="${basedir}/hxasm/" />
         <!-- convert the names of excluded classes to packages with class names -->
-        <pathconvert property="hxasm_classes" pathsep=" " refid="hxasm_sources">
+        <pathconvert property="hxasm_classes" pathsep="," refid="hxasm_sources">
                 <chainedmapper>
                         <globmapper from="${basedir}/*" to="*"/>
                         <mapper type="package" from="*.as" to="*"/>
        
       <!-- Sets java.awt.headless=true so font compilation works in headless environments -->
       <compiler.headless-server>true</compiler.headless-server>
-      <target-player>10.0.0</target-player>
+      <target-player>10.2.0</target-player>
      </mxmlc>
      
      <echo message="The ${test.application.name}.swf test runner has been created in ${test.bin.dir}" />
 
 
         <source-path path-element="${basedir}/l10n/locale/@{locale}"/>
+        <source-path path-element="${basedir}/l10n/locale/en_US"/>
         <include-resource-bundles>help_dialog</include-resource-bundles>
         <include-resource-bundles>p2_main</include-resource-bundles>
 
     </sequential>
   </macrodef>
 
-  <target name="buildLocales">
-    <echo>Building Localization .swf's</echo>
-    <compileLocale locale="en_US" />
-    <compileLocale locale="en_GB" />
-    <compileLocale locale="fr_FR" />
-    <compileLocale locale="de_DE" />
-    <compileLocale locale="pl_PL" />
+  <target name="makeLocalesList">
+    <ac:for param="dirname">
+      <path>
+        <dirset dir="${basedir}/l10n/locale/">
+          <include name="*"/>
+          <exclude name="bundles"/>
+        </dirset>
+      </path>
+      <sequential>
+        <ac:var name="localename" unset="true"/>
+        <basename property="localename" file="@{dirname}" />
+        <script language="javascript"><![CDATA[
+            if ((l = project.getProperty("locales.list")) != null) {
+               project.setUserProperty("locales.list", l+ "," +project.getProperty("localename"));
+            } else {
+               project.setUserProperty("locales.list", project.getProperty("localename"));
+            }
+        ]]></script>
+      </sequential>
+    </ac:for>
   </target>
 
+  <target name="buildLocales" depends="makeLocalesList">
+    <echo>Building Localization .swf's</echo>
+    <ac:for list="${locales.list}" keepgoing="true" param="localename">
+      <sequential>
+        <compileLocale locale="@{localename}" />
+      </sequential>
+    </ac:for>
+  </target>
 
   <target name="deployLocales" depends="buildLocales">
     <echo>Deploying the compiled swf and assets package for the given locales</echo>
-    <deployLocale locale="en_US" />
-    <deployLocale locale="en_GB" />
-    <deployLocale locale="fr_FR" />
-    <deployLocale locale="de_DE" />
-    <deployLocale locale="pl_PL" />
+    <ac:for list="${locales.list}" keepgoing="true" param="localename">
+      <sequential>
+        <deployLocale locale="@{localename}" />
+      </sequential>
+    </ac:for>
   </target>
 
 
diff --git a/l10n/locale/ast/help_dialog.properties b/l10n/locale/ast/help_dialog.properties
new file mode 100644 (file)
index 0000000..7cfb7ba
--- /dev/null
@@ -0,0 +1,26 @@
+# Messages for Asturian (Asturianu)
+# Exported from translatewiki.net
+# Author: Xuacu
+
+help.gettingStarted=Primeros pasos
+help.welcome=Bienveníos
+help.whyOpenstreetmap=<p><b>¿Por qué OpenStreetMap?</b> OSM ye un serviciu de mapes nel que tolos datos s'anueven constantemente y los edita xente como tu. La ventaya obvia ye que se pue usar llibremente, pero tamién ye un recursu importante na cartografía de crisis (por exemplu, la utilización de datos d'OSM pa coordinar los esfuerzos de salvamentu nel terremotu d'Haití). La precisión de los datos ye crítica, y ¡esperamos que puedas ufrir voluntariamente parte del to tiempu!</p>
+help.activeMembers=<p><b>+ Pa los miembros activos d'OpenStreetMap</b>, anicia sesión en OSM enantes d'editar</p>
+help.newMembers=<p><b>+ Pa miembros nuevos</b>, por favor visita <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> pa crear una cuenta, anicia sesión, y llueu vuelvi equí pa permitir l'accesu a Potlatch 2 y empezar a editar.</p>
+help.introText=<p><b>Potlatch2</b> ye un editor d'OpenStreetMap (OSM) que te permite editar direutamente per aciu del sitiu Web {0}.</p>
+help.introduction=Introducción
+help.controls=Controles
+help.interfaceControls=Controles de la interfaz
+help.mapBackground=<p>Escueyi'l fondu del mapa d'unu de los elementos de la llista o amiesta'l to propiu ficheru vectorial.</p>
+help.colourStyle=<p>Escueyi l'estilu col que quies ver el mapa. Los colores y l'estilu xeneral cambien y tamién incluyen otres opciones como cadarma d'alambre (wireframe).</p>
+help.gps=GPS
+help.createOsmMap=<p>Crear los datos del mapa OSM usando les traces GPS d'otra xente como fondu</p>
+help.myGps=MyGPS
+help.displayGps=<p>Amuesa les traces GPS que xubisti anteriormente a OpenStreetMap.</p>
+help.undoRedo=Desfacer / Volver a facer
+help.madeMistake=<p>¿T'enquivocasti? Val con calcar desfacer y/o volver a facer pa correxir les ediciones.</p>
+help.help=Ayuda
+help.guideInfomation=<p>Trai esta guía en casu de necesitar dalguna información cuando principies a editar.</p>
+help.save=Guardar
+help.shortcuts=Atayos
+help.keyboardShortcuts=Atayos de tecláu
diff --git a/l10n/locale/ast/p2_main.properties b/l10n/locale/ast/p2_main.properties
new file mode 100644 (file)
index 0000000..76e3c04
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Asturian (Asturianu)
+# Exported from translatewiki.net
+# Author: Xuacu
+
+main.undo=Desfacer
+main.redo=Volver a facer
+main.background=Fondu
+main.map_style=Estilu de mapa
+main.gpsButton=Data GPS
+main.gps_data=Data GPS
+main.my_tracks=Les mios traces
+main.clear_gps=Llimpiar
+main.help=Ayuda
+main.options=Opciones
+main.save=Guardar
+tag_viewer.dndprompt=Amestar puntos nuevos arrastrandolos al mapa
+toolbox.delete_node=Desaniciar noyu (Desaniciar)
+toolbox.delete_area=Desaniciar área (May.+Desaniciar)
+toolbox.delete_way=Desaniciar vía (May.+Desaniciar)
+toolbox.delete_item=Desaniciar elementu
+toolbox.reverse_direction=Invertir direición (V)
+toolbox.split_way=Partir vía (X)
+toolbox.merge_ways=Amestar víes
+toolbox.straighten_way=Enderechar vía
+toolbox.make_circular=Facer circular
+toolbox.make_right_angled=Poner n'ángulu rectu (Q)
+toolbox.create_parrallel_way=Crear vía paralela (P)
+oauth.gotLinkBox=Calca nel enllaz d'abaxo p'abrir una páxina web que te pidirá qu'autorices l'accesu d'esta aplicación.
+oauth.authorized=Cuando autorices l'accesu, calca nel botón «Probar accesu» d'abaxo
+oauth.deniedLabel=<b>Se negó l'accesu, compruebalo ya intentalo otra vuelta</b>
+oauth.rememberMe=Recordame
+oauth.permFail=<p>El sirvidor refugó les credenciales d'esta aplicación -- nun se pudo alcontrar un enllaz d'autorización.        </p>\n<p>       <b>L'accesu OAuth nun va ser posible.</b>       </p>\n<p>       Ponte'n contautu col vendedor d'esa aplicación pa saber qué ye lo que pasa.</p>
+oauth.tempFail=Hebo un problema al comunicar col sirvidor pa pidir autorización.    Pue ser por un error temporal, intentalo más sero.
+oauth.tryAccessButton=Probar accesu
+oauth.cancelButton=Encaboxar
+save.editDescription=Escribi una descripción de les tos ediciones. Esto s'utilizará pa dar a otros mapeadores una idea de los cambios que tas faciendo.
+styleSelector.editButton=Editar...
+backgroundSelector.dim=dilir
+backgroundSelector.sharpen=rescamplar
+backgroundSelector.editButton=Editar...
+backgroundSelector.vectorButton=Ficheru vectorial...
+options.tbcheck=Amosar ferramientes
+options.cursorcheck=Usar cursores personalizaos
+options.ok=Aceutar
diff --git a/l10n/locale/br/help_dialog.properties b/l10n/locale/br/help_dialog.properties
new file mode 100644 (file)
index 0000000..b2e4dc1
--- /dev/null
@@ -0,0 +1,15 @@
+# Messages for Breton (Brezhoneg)
+# Exported from translatewiki.net
+# Author: Fulup
+
+help.gettingStarted=Kregiñ ganti
+help.welcome=Degemer mat
+help.introduction=Digoradur
+help.gps=GPS
+help.myGps=MyGPS
+help.undoRedo=Dizober / Adober
+help.help=Skoazell
+help.save=Enrollañ
+help.tag=Tikedenn
+help.shortcuts=Berradennoù
+help.keyboardShortcuts=Berradennoù klavier
diff --git a/l10n/locale/br/p2_main.properties b/l10n/locale/br/p2_main.properties
new file mode 100644 (file)
index 0000000..4383b1a
--- /dev/null
@@ -0,0 +1,34 @@
+# Messages for Breton (Brezhoneg)
+# Exported from translatewiki.net
+# Author: Fulup
+
+main.undo=Dizober
+main.redo=Adober
+main.background=Drekleur
+main.map_style=Stil ar gartenn
+main.gpsButton=Roadennoù GPS
+main.gps_data=Roadennoù GPS
+main.clear_gps=Riñsañ
+main.help=Skoazell
+main.options=Dibarzhioù
+main.save=Enrollañ
+tag_viewer.dndprompt=Ouzhpennañ poentoù nevez en ur lakaat anezho da riklañ war ar gartenn
+toolbox.delete_node=Diverkañ ar skoulm (diverkañ)
+toolbox.delete_area=Takad diverkañ (Pennlizh. + Diverkañ)
+toolbox.delete_way=Hent diverkañ (Pennlizh. + Diverkañ)
+toolbox.delete_item=Diverkañ an elfenn
+toolbox.reverse_direction=Eilpennañ an durc'hadur (v)
+toolbox.split_way=Rannañ an hent (X)
+toolbox.merge_ways=Kendeuziñ an hentoù
+toolbox.straighten_way=Eeunaat an hent
+toolbox.make_circular=Lakaat da vezañ kelc'hiek
+toolbox.make_right_angled=Ober ur c'horn skouer (Q)
+toolbox.create_parrallel_way=Krouiñ un hent kenstur (P)
+oauth.deniedLabel=<b>Nac'het eo bet ar moned, gwiriit mat ha klaskit en-dro goude-se</b>
+oauth.rememberMe=Derc'hel soñj ac'hanon
+oauth.cancelButton=Nullañ
+styleSelector.editButton=Kemmañ...
+backgroundSelector.editButton=Kemmañ...
+backgroundSelector.vectorButton=Restr vektor...
+options.tbcheck=Diskouez ar voestad ostilhoù
+options.ok=Mat eo
index 369a9e45dcf3202c6d69a1e5d2d337237ed4cf16..ee70dfc49a23a5d7f8e99068874e0115729387d6 100644 (file)
@@ -1,4 +1,35 @@
-# de resources file
+# Messages for German (Deutsch)
+# Exported from translatewiki.net
+# Author: Apmon
+# Author: Kghbln
 
-help.gettingStarted = So geht's los
-help.welcome = Willkommen
+help.gettingStarted=So geht's los
+help.welcome=Willkommen
+help.whyOpenstreetmap=<p><b>Warum OpenStreetMap?</b> OSM ist ein Katografierdienst, bei dem alle Daten ständig von Menschen wie du aktualisiert und bearbeitet werden. Der offensichtliche Vorteil ist, dass er kostenfrei genutzt werden kann. OSM ist aber auch ein wichtiger Akteur der Krisenkartografie geworden, wie es beispielsweise die Nutzung von OSM-Daten, zur Koordinierung von Hilfsmaßnahmen, nach dem schweren Erdbeben in Haiti gezeigt hat. Die Genauigkeit dieser Daten ist unerlässlich, und wir hoffen daher, dass du hierzu etwas deiner Zeit beisteuern kannst!</p>
+help.activeMembers=<p><b>+ Für aktive OpenStreetMap-Mitglieder</b>. Bitte vor der Bearbeitung anmelden</p>
+help.newMembers=<p><b>+ Für neue Mitglieder</b>. Bitte <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> aufrufen, um sich zu registrieren sowie anzumelden. Danach hierher zurückkehren, um Zugang zu Potlatch 2 zu erhalten und mit dem Bearbeiten zu beginnen.</p>
+help.introText=<p><b>Potlatch2</b> ist ein OpenStreetMap-Editor, der es ermöglicht Bearbeitungen direkt über die Website {0} zu machen.</p>
+help.introduction=Einführung
+help.controls=Bedienelemente
+help.interfaceControls=Bedienelemente der Benutzeroberfläche
+help.mapBackground=<p>Wähle deinen Kartenhintergrund aus einem der in der Liste vorhandenen Elemente oder füge deine eigene Vektordatei hinzu.</p>
+help.colourStyle=<p>Wähle die Anmutung, in der du die Karte angezeigt bekommen möchtest. Farben sowie Stil variieren und beinhalten auch andere Optionen, wie die Drahtgitterdarstellung.</p>
+help.gps=GPS
+help.createOsmMap=<p>Erstellen von OSM-Kartendaten auf Basis im Hintergrund angezeigter GPS-Tracks anderer Menschen</p>
+help.myGps=Mein GPS
+help.displayGps=<p>Anzeigen von GPS-Spuren, die du zuvor nach OpenStreetMap hochgeladen hast</p>
+help.undoRedo=Rückgängig machen / Wiederherstellen
+help.madeMistake=<p>Ein Fehler ist passiert? Klicke einfach auf „Rückgängig machen“ und/oder „Wiederherstellen“, um deine Bearbeitungen zu berichtigen.</p>
+help.help=Hilfe
+help.guideInfomation=<p>Öffnet diese Anleitung für den Fall, dass du am Anfang deiner Bearbeitungen Informationen benötigst.</p>
+help.save=Speichern
+help.addingFeatures=Hinzufügen von Funktionen
+help.editBeg=Bearbeiten (Anfänger)
+help.editingFeatures=Funktionen zum Bearbeiten (Anfänger)
+help.editAdv=Bearbeiten (Fortgeschrittene)
+help.editingFeaturesAdv=Funktionen zum Bearbeiten (Fortgeschrittene)
+help.tag=Markieren
+help.taggingFeatures=Funktionen zum Markieren
+help.taggingFeaturesText=<p>Dank Potlatch 2 ist das Tagging von Objekten durch die Verwendung von graphischen Menus und Symbolen recht einfach geworden.</p>\n<p><b>Tagging von Objekten</b></p>\n<p>Selektiere den Weg oder Punkt den Du bearbeiten willst, und waehle den entsprechenden Tag aus dem Menu in der linken Seitenleiste aus. Danach werden einige Textfelder erscheinen in die man einige der grundlegenden Eigenschaften, wie z.B. Name eintragen kann. Die genauen Eigenschaften haengen von der Art des Weges oder Punktes ab. Diese sollten so gut wie moeglich ausgefuellt werden.</p><p>Da beliebige Eigenschaften einem Objekt zugewiesen werden koennen, sind natuerlich nicht alle als separate Felder vorhanden. Insofern kann es sein das einige gewueschte Tags oder Werte nicht vorgegeben sind. In diesem Fall koennen durch das klicken der Registerkarte "Advanced" am unteren Rand der Seitenleiste weitere Tags hinzugefuegt werden.</p>\n<p> Das OpenStreetMap wiki verfuegt ueber eine <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">ausfuehrliche Liste von Tags und Werten</a>. Falls es Unklarheiten bezueglich des taggings, sollte die OSM Dokumentation im Wiki konsultiert werden.</p>
+help.shortcuts=Abkürzungen
+help.keyboardShortcuts=Tastaturabkürzungen
index 2a43a64e87536dfb05c1a991d5904b6929789f5e..dd343ce5f605e79018e7e9ceb0ed020089560fd6 100644 (file)
@@ -1,26 +1,43 @@
-# de resources file
+# Messages for German (Deutsch)
+# Exported from translatewiki.net
 
-main.undo = Rückgängig
-main.redo = Wiederholen
-main.background = Hintergrund
-main.map_style = Map-Stil
-main.gps_data = GPS-Daten
-main.my_tracks = Meine Tracks
-main.clear_gps = Clear
-main.help = Hilfe
-main.options = Optionen
-main.save = Speichern
-
-tag_viewer.dndprompt = Neue Punkte durch Ziehen auf die Karte hinzufügen
-
-toolbox.delete_node = Knoten löschen (Entf)
-toolbox.delete_area = Fläche löschen (Umsch+Entf)
-toolbox.delete_way = Weg löschen (Umsch+Entf)
-toolbox.delete_item = Objekt löschen
-toolbox.reverse_direction = Richtung umkehren (V)
-toolbox.split_way = Weg teilen (X)
-toolbox.merge_ways = Wege verbinden
-toolbox.straighten_way = Weg begradigen
-toolbox.make_circular = Kreisförmig anordnen
-toolbox.make_right_angled = Rechtwinklig anordnen (Q)
-toolbox.create_parrallel_way = Parallelen Weg erstellen (P)
\ No newline at end of file
+main.undo=Rückgängig
+main.redo=Wiederholen
+main.background=Hintergrund
+main.map_style=Map-Stil
+main.gpsButton=GPS Daten
+main.gps_data=GPS-Daten
+main.my_tracks=Meine Tracks
+main.clear_gps=Clear
+main.help=Hilfe
+main.options=Optionen
+main.save=Speichern
+tag_viewer.dndprompt=Neue Punkte durch Ziehen auf die Karte hinzufügen
+toolbox.delete_node=Knoten löschen (Entf)
+toolbox.delete_area=Fläche löschen (Umsch+Entf)
+toolbox.delete_way=Weg löschen (Umsch+Entf)
+toolbox.delete_item=Objekt löschen
+toolbox.reverse_direction=Richtung umkehren (V)
+toolbox.split_way=Weg teilen (X)
+toolbox.merge_ways=Wege verbinden
+toolbox.straighten_way=Weg begradigen
+toolbox.make_circular=Kreisförmig anordnen
+toolbox.make_right_angled=Rechtwinklig anordnen (Q)
+toolbox.create_parrallel_way=Parallelen Weg erstellen (P)
+oauth.gotLinkBox=Klicken Sie auf den untenstehenden Link zu einer Webseite, wo Sie aufgefordert, den Zugriff auf diese App genehmigen wird geöffnet sein.
+oauth.authorized=Sobald Sie autorisiert den Zugriff auf das 'versuchen Sie Zugang' Button unten
+oauth.deniedLabel=<b> Zugang verweigert wurde, überprüfen Sie bitte, und versuchen Sie es erneut </b>
+oauth.rememberMe=Erinnere dich an mich
+oauth.permFail=<p>Der Server verweigert diese Anwendung die Anmeldeinformationen -- eine Genehmigung Link konnte nicht abgerufen werden. </p><p> <b>OAuth Zugriff nicht möglich sein wird.</b></p><p>Bitte kontaktieren Sie Hersteller, um herauszufinden, was los ist.</p>
+oauth.tempFail=Es gab ein Problem mit dem Server Kontakt auf Genehmigung zu bekommen. Dies kann ein temporärer Fehler sein, versuchen Sie es später erneut.
+oauth.tryAccessButton=versuchen Sie Zugang
+oauth.cancelButton=Stornieren
+save.editDescription=Bitte geben Sie eine Beschreibung Ihres Bearbeitungen. Dies wird verwendet, um andere Mapper eine Idee, welche Änderungen Sie machen werden.
+styleSelector.editButton=Bearbeiten...
+backgroundSelector.dim=dim
+backgroundSelector.sharpen=sharpen
+backgroundSelector.editButton=Bearbeiten...
+backgroundSelector.vectorButton=Vector file...
+options.tbcheck=Zeige Toolbox
+options.cursorcheck=Verwenden Sie benutzerdefinierte Cursor
+options.ok=Ok
index 70837289451d60759ca69c2a9113ae791d9c7c2d..01fb105d9d135aab203c9aa7044cf4fd142b20ff 100644 (file)
@@ -1,6 +1,5 @@
-# en_GB resources file
-
-help.gettingStarted = Getting Started
-help.welcome = Welcome
-
+# Messages for British English (British English)
+# Exported from translatewiki.net
 
+help.gettingStarted=Getting Started
+help.welcome=Welcome
index 3a70d5d6d65348635894e738e2c38972a05ab2a1..0124f072f8f456f5b2dd09f289cc43576f39ad62 100644 (file)
@@ -1,26 +1,42 @@
-# en_GB resources file
+# Messages for British English (British English)
+# Exported from translatewiki.net
 
-main.undo = Undo
-main.redo = Redo
-main.background = Background
-main.map_style = Map Style
-main.gps_data = GPS Data
-main.my_tracks = My Tracks
-main.clear_gps = Clear
-main.help = Help
-main.options = Options
-main.save = Save
-
-tag_viewer.dndprompt = Add new points by dragging them onto the map
-
-toolbox.delete_node = Delete Node (Delete)
-toolbox.delete_area = Delete Area (Shift+Delete)
-toolbox.delete_way = Delete Way (Shift+Delete)
-toolbox.delete_item = Delete Item
-toolbox.reverse_direction = Reverse direction (V)
-toolbox.split_way = Split way (X)
-toolbox.merge_ways = Merge ways
-toolbox.straighten_way = Straighten Way
-toolbox.make_circular = Make circular
-toolbox.make_right_angled = Make right-angled (Q)
-toolbox.create_parrallel_way = Create parallel way (P)
\ No newline at end of file
+main.undo=Undo
+main.redo=Redo
+main.background=Background
+main.map_style=Map Style
+main.gps_data=GPS Data
+main.my_tracks=My Tracks
+main.clear_gps=Clear
+main.help=Help
+main.options=Options
+main.save=Save
+tag_viewer.dndprompt=Add new points by dragging them onto the map
+toolbox.delete_node=Delete node (Delete)
+toolbox.delete_area=Delete area (Shift+Delete)
+toolbox.delete_way=Delete way (Shift+Delete)
+toolbox.delete_item=Delete item
+toolbox.reverse_direction=Reverse direction (V)
+toolbox.split_way=Split way (X)
+toolbox.merge_ways=Merge ways
+toolbox.straighten_way=Straighten way
+toolbox.make_circular=Make circular
+toolbox.make_right_angled=Make right-angled (Q)
+toolbox.create_parrallel_way=Create parallel way (P)
+oauth.gotLinkBox=Click the link below to open a web page where you will be asked to authorise access for this app.
+oauth.authorized=Once you've authorised the access click the 'Try access' button below
+oauth.deniedLabel=<b>Access was denied, please check, and try again</b>
+oauth.rememberMe=Remember me
+oauth.permFail=<p>The server refused this application's credentials -- an authorisation link could not be obtained.          </p><p>         <b>OAuth access will not be possible.</b>  </p><p> Please contact application vendor to find out what's going on.</p>
+oauth.tempFail=There was a problem contacting the server to get authorisation.    This may be a temporary error, try again later.
+oauth.tryAccessButton=Try access
+oauth.cancelButton=Cancel
+save.editDescription=Please enter a description of your edits. This will be used to give other mappers an idea of what changes you are making.
+styleSelector.editButton=Edit...
+backgroundSelector.dim=dim
+backgroundSelector.sharpen=sharpen
+backgroundSelector.editButton=Edit...
+backgroundSelector.vectorButton=Vector file...
+options.tbcheck=Show toolbox
+options.cursorcheck=Use custom cursors
+options.ok=Ok
index 32d1870911e3671f2639f58497708dbfff6791d4..3c795c2c2140d1a4bc4caa0ca39c05637a223cd9 100644 (file)
@@ -2,5 +2,34 @@
 
 help.gettingStarted = Getting Started
 help.welcome = Welcome
-
-
+help.whyOpenstreetmap = <p><b>Why OpenStreetMap?</b> OSM is a mapping service in which all data is constantly updated and edited by everyday people like you. The obvious benefit is that it's free to use, but it has also become a major player in crisis mapping (e.g. use of OSM data to coordinate earthquake relief efforts in Haiti). Accuracy of this data is critical, and we hope you are able to volunteer some of your time!</p>
+help.activeMembers = <p><b>+ For active OpenStreetMap members</b>, please sign in to OSM before editing.</p>
+help.newMembers = <p><b>+ For new members</b>, please visit <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> to create an account, log in, then return here to allow access to Potlatch 2 and begin editing.</p>
+help.introText = <p><b>Potlatch 2</b> is an OpenStreetMap (OSM) editor that allows you to make edits directly through {0} website.</p>
+help.introduction = Introduction
+help.controls = Controls
+help.interfaceControls = Interface Controls
+help.mapBackground = <p>Choose your map background from one of the items in the list or add your own vector file.</p>
+help.colourStyle=<p>Choose the style in which you wish to view the map. Colours and overall style vary and also includes other options like wireframe.</p>
+help.gps = GPS
+help.createOsmMap = <p>Create OSM map data using other people's GPS tracks as a background</p>
+help.myGps = MyGPS
+help.displayGps = <p>Display GPS traces that you've previously uploaded to OpenStreetMap.</p>
+help.undoRedo = Undo / Redo
+help.madeMistake = <p>Made a mistake? Just hit undo and/or redo to correct your edits.</p>
+help.help = Help
+help.guideInfomation = <p>Brings up this guide in case you need any information as you begin editing.</p>
+help.save = Save
+help.addingFeatures = Adding Features
+help.addingFeaturesText = <p><i>Before you begin, the first rule you need to know is the use of proprietary data. Data from copyrighted maps or any other proprietary data is strictly prohibited! Copying, tracing or any reproduction of copyrighted work is not allowed! (Source: <a href="http://wiki.openstreetmap.org/wiki/Copyright" target="_blank">Copyright - OpenStreetMap Wiki</a>)</i></p>\n  <p></p>\n  <p>Linear features such as streets, footpaths, railways and building outlines will hereby be referred to as <b>ways</b>.</p>\n  <p>If you suddenly realize your sidebar with all the icons have gone missing, it's because you have a feature selected on the map. Simply deselect by clicking on a blank area of the map to bring up the icons again.</p>\n            <p><b>To create a point (or node)</b>, just drag and drop the appropriate icon from the sidebar onto the map. See Add POIs to learn more about creating a POI (Point of Interest)</p>\n            <p><b>To create a way</b>, begin by clicking on the map at its start point, then click at each successive point. Double-click to finish the line or press Enter.</p>\n            <p><b>To create a polygon</b>, begin by clicking on the map at its start point, then click at each successive point (similar to creating a way), and finish by clicking on the very first point to close the polygon.</p>\n            <p>Remember, if you make a mistake, you can always hit the Undo button. Pressing the Esc key will undo all your edits for the current feature.</p>
+help.editBeg = Edit (Beg.)
+help.editingFeatures = Editing Features (Beginner)
+help.editingFeaturesText = <p><b>To add a point to an existing way</b>, select the way and shift+click at the desired location.</p>\n    <p><b>To delete a point</b>, select the point and click the Delete Item button in the bottom right corner or press Delete (or Backspace) on your keyboard.</p>\n  <p><b>To delete a way</b>, select the way and click the Delete Item button in the bottom right corner or press shift+Delete (or shift+Backspace) on your keyboard.</p>\n    <p><b>To move a point</b>, click and drag the point.</p>\n   <p><b>To move a way</b>, click and drag the entire feature. Hint: Grab a segment where you won't accidentally move a node.</p>\n  <p><b>To extend a way</b>, click on one of the end points of the way. Then continue drawing as usual.</p>\n    <p><b>To add a new way extending from an existing way</b>, shift+click on one of the end points of the way. Then continue drawing as usual.</p>
+help.editAdv = Edit (Adv.)
+help.editingFeaturesAdv = Editing Features (Advanced)
+help.editingFeaturesAdvText =  <p><b>To split a way</b>, select the point at which you want to cut, and click the Scissor tool or press X on your keyboard. Hint: Add a node first in order to cut between nodes.</p>\n            <p><b>To make a junction between two ways</b>, draw as usual until you need to make a junction. Then as you move your mouse over another way, the points will light up blue. Click on one of the blue points or any other desired location on the way to make a junction.</p>\n            <p><b>To disconnect a junction</b>, select the point on the way you wish to alter. The press - on your keyboard to remove the point.</p>\n            <p><b>To reverse the direction of a way</b>, click the Reverse Direction button in the bottom right corner. The direction of a way is only a concern for those features with a "oneway" tag - oneway streets, coastlines, islands, and so on.</p>\n            <p><b>To create a way running parallel</b>, select the way and click the Create Parallel Way button in the bottom right corner or press P on your keyboard.</p>\n     <p><b>To create a way that shares nodes with an existing way</b>, start drawing, click the first two shared nodes, then press F to automatically follow the existing way.</p>\n            <p><i>Visit the <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer" target="_blank">Potlatch 2 Primer</a> on the OpenStreetMap wiki for even more advanced editing methods and conventions.</i></p>
+help.tag = Tag
+help.taggingFeatures = Tagging Features
+help.taggingFeaturesText = <p>With Potlatch 2, tagging features has become relatively easy with its use of graphical menus and dedicated fields/icons.</p>\n          <p><b>Tagging a feature</b></p>\n          <p>Select the point or way that you wish to edit, and choose the appropriate tag from the left sidebar. After tagging the feature, some basic fields should appear such as Name, Speed Limit, and Width, depending on the tag you gave. Fill these out as best you can.</p><p>Advanced users may notice the absence of a few tags and tag values they occasionally use. If this is the case, click on the Advanced tab at the bottom of the sidebar and edit/add as necessary.</p>\n          <p>The OpenStreetMap wiki also provides an <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">extensive list of tags and tag values</a>. Please refer back to the OSM documentation if you are unsure of which tag to use.</p>
+help.shortcuts = Shortcuts
+help.keyboardShortcuts = Keyboard Shortcuts
index a97e062fc479f95b0f9fefc73fbcf4994a01b6af..80f47c2b052731aefbc4146facff87e82f5c21dd 100644 (file)
@@ -4,9 +4,45 @@ main.undo = Undo
 main.redo = Redo
 main.background = Background
 main.map_style = Map Style
+main.gpsButton = GPS Data
 main.gps_data = GPS Data
 main.my_tracks = My Tracks
 main.clear_gps = Clear
 main.help = Help
 main.options = Options
 main.save = Save
+
+tag_viewer.dndprompt = Add new points by dragging them onto the map
+
+toolbox.delete_node = Delete node (Delete)
+toolbox.delete_area = Delete area (Shift+Delete)
+toolbox.delete_way = Delete way (Shift+Delete)
+toolbox.delete_item = Delete item
+toolbox.reverse_direction = Reverse direction (V)
+toolbox.split_way = Split way (X)
+toolbox.merge_ways = Merge ways
+toolbox.straighten_way = Straighten way
+toolbox.make_circular = Make circular
+toolbox.make_right_angled = Make right-angled (Q)
+toolbox.create_parrallel_way = Create parallel way (P)
+
+oauth.gotLinkBox=Click the link below to open a web page where you will be asked to authorise access to this application.
+oauth.authorized=Once you've authorised the access click the 'Try access' button below
+oauth.deniedLabel=<b>Access was denied, please check, and try again</b>
+oauth.rememberMe=Remember me
+oauth.permFail=<p>The server refused this application's credentials -- an authorisation link could not be obtained.          </p>\n<p>       <b>OAuth access will not be possible.</b>       </p>\n<p>       Please contact application vendor to find out what's going on.</p>
+oauth.tempFail=There was a problem contacting the server to get authorisation.    This may be a temporary error, try again later.
+oauth.tryAccessButton=Try access
+oauth.cancelButton=Cancel
+
+save.editDescription=Please enter a description of your edits. This will be used to give other mappers an idea of what changes you are making.
+
+styleSelector.editButton=Edit...
+backgroundSelector.dim=dim
+backgroundSelector.sharpen=sharpen
+backgroundSelector.editButton=Edit...
+backgroundSelector.vectorButton=Vector file...
+
+options.tbcheck=Show toolbox
+options.cursorcheck=Use custom cursors
+options.ok=OK
diff --git a/l10n/locale/es_ES/help_dialog.properties b/l10n/locale/es_ES/help_dialog.properties
new file mode 100644 (file)
index 0000000..3b34201
--- /dev/null
@@ -0,0 +1,16 @@
+# Messages for Spanish (Español)
+# Exported from translatewiki.net
+# Author: Armando-Martin
+
+help.gettingStarted=Primeros pasos
+help.welcome=Bienvenido
+help.whyOpenstreetmap=<p><b>¿Por qué OpenStreetMap?</b> OSM es un servicio de mapas en el que todos los datos se actualizan constantemente y son editados por gente como tú. La ventaja obvia es que es de uso libre, pero también se ha convertido en un jugador importante en el mapeo de crisis (por ejemplo, la utilización de datos de OSM para coordinar los esfuerzos de salvamento en el terremoto de Haití). La precisión de los datos es crítica, y ¡esperamos que puedas dedicar voluntariamente una parte de tu tiempo!</p>
+help.activeMembers=<p><b>+ Para miembros activos de OpenStreetMap</b>, identifícate en OSM antes de editar</p>
+help.newMembers=<p><b>+ Para los nuevos miembros</b>, por favor visite <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> para crear una cuenta, inicie la sesión y luego vuelva aquí para permitir el acceso a Potlatch 2 y empezar a editar.</p>
+help.introText=<p><b>Potlatch2</b> es un editor de OpenStreetMap (OSM) que le permite realizar cambios directamente a través del sitio Web de {0}.</p>
+help.introduction=Introducción
+help.controls=Controles
+help.interfaceControls=Controles de la interfaz
+help.mapBackground=<p>Elija su fondo de mapa de uno de los elementos de la lista o agregue su propio archivo vectorial.</p>
+help.colourStyle=<p>Elija el estilo con el que desea ver el mapa. Los colores y el estilo general varían y también incluyen otras opciones como modelo de alambres (wireframe).</p>
+help.gps=GPS
diff --git a/l10n/locale/es_ES/p2_main.properties b/l10n/locale/es_ES/p2_main.properties
new file mode 100644 (file)
index 0000000..c93299f
--- /dev/null
@@ -0,0 +1,13 @@
+# Messages for Spanish (Español)
+# Exported from translatewiki.net
+# Author: Armando-Martin
+
+oauth.tryAccessButton=Prueba de acceso
+oauth.cancelButton=Cancelar
+save.editDescription=Introduzca una descripción de sus ediciones. Se utilizará para dar a otros mapeadores una idea de los cambios que está haciendo.
+styleSelector.editButton=Editar...
+backgroundSelector.editButton=Editar...
+backgroundSelector.vectorButton=Archivo vectorial...
+options.tbcheck=Mostrar el cuadro de herramientas
+options.cursorcheck=Usar los cursores personalizados
+options.ok=Aceptar
diff --git a/l10n/locale/fi/p2_main.properties b/l10n/locale/fi/p2_main.properties
new file mode 100644 (file)
index 0000000..6cbf274
--- /dev/null
@@ -0,0 +1,41 @@
+# Messages for Finnish (Suomi)
+# Exported from translatewiki.net
+# Author: Nike
+
+main.undo=Kumoa
+main.redo=Tee uudelleen
+main.background=Tausta
+main.map_style=Karttatyyli
+main.gpsButton=GPS-tiedot
+main.gps_data=GPS-tiedot
+main.my_tracks=Omat jäljet
+main.clear_gps=Tyhjennä
+main.help=Ohje
+main.options=Asetukset
+main.save=Tallenna
+tag_viewer.dndprompt=Lisää uusi piste vetämällä se kartalle
+toolbox.delete_node=Poista piste (Delete)
+toolbox.delete_area=Poista alue (Shift+Delete)
+toolbox.delete_way=Poista polku (Shift+Delete)
+toolbox.delete_item=Poista kohde
+toolbox.reverse_direction=Käännä suunta (V)
+toolbox.split_way=Jaa polku (X)
+toolbox.merge_ways=Yhdistä polut
+toolbox.straighten_way=Suorista polku
+toolbox.make_circular=Pyöristä
+toolbox.create_parrallel_way=Luo rinnakkainen polku (P)
+oauth.gotLinkBox=Alla olevan linkin kautta voit oikeuttaa muita sovelluksia ohjaamaan tätä sovellusta.
+oauth.authorized=Kun olet antanut oikeuden, testaa sen toimivuutta alla olevalla painikkeella.
+oauth.deniedLabel=<b>Käyttö on estetty, tarkista ja yritä uudelleen</b>
+oauth.rememberMe=Muista minut
+oauth.tryAccessButton=Testaa oikeutta
+oauth.cancelButton=Peruuta
+save.editDescription=Kuvaile tekemiäsi muutoksia, jotta muut kartoittajat saavat käsityksen niistä.
+styleSelector.editButton=Muokkaa...
+backgroundSelector.dim=himmennä
+backgroundSelector.sharpen=terävöitä
+backgroundSelector.editButton=Muokkaa...
+backgroundSelector.vectorButton=Vektoritiedosto...
+options.tbcheck=Näytä työkalupalkki
+options.cursorcheck=Käytä mukautettuja osoittimia
+options.ok=OK
index 727b4d8052ec9ef10805896830e98606d684b1ef..214e844751c16da9ddf228b1841332db414547c5 100644 (file)
@@ -1,4 +1,38 @@
-# fr_FR resources file
+# Messages for French (Français)
+# Exported from translatewiki.net
+# Author: Crochet.david
+# Author: Verdy p
 
-help.gettingStarted = De Commencer
-help.welcome = Bienvenue
\ No newline at end of file
+help.gettingStarted=Comment bien commencer
+help.welcome=Bienvenue
+help.whyOpenstreetmap=<p><b>Pourquoi OpenStreetMap ?</b> OSM est un service de cartographie dans lequel toutes les données sont constamment mises à jour et modifiées par des personnes ordinaires telles que vous. L’avantage évident est qu’OSM est libre et gratuit à utiliser, mais OSM est également devenu un acteur majeur de la cartographie des crises (par ex., utilisation des données OSM pour coordonner les efforts humanitaires suite au tremblement de terre en Haïti). La précision de ces données est critique et nous espérons que vous serez capable de contribuer de façon bénévole un peu de votre temps !</p>
+help.activeMembers=<p><b>+ Pour les membres actifs d’OpenStreetMap</b>, veuillez vous connecter à OSM avant d’effectuer vos modifications.</p>
+help.newMembers=<p><b>+ Pour les nouveaux membres</b>, veuillez visiter <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> pour créer un compte, connectez-vous, puis revenez ici pour autoriser l’accès par Potlatch 2 avant de commencer vos modifications.</p>
+help.introText=<p><b>Potlatch 2</b> est un éditeur pour OpenStreetMap (OSM) qui vous permet d’apporter des modifications directement via le site Web de {0}.</p>
+help.introduction=Introduction
+help.controls=Contrôles
+help.interfaceControls=Contrôles de l’interface
+help.mapBackground=<p>Choisissez votre fond de carte parmi les éléments de la liste ou ajoutez votre propre fichier vectoriel.</p>
+help.colourStyle=<p>Choisissez le style dans lequel vous souhaitez afficher la carte. Les couleurs et le style général varient et comprennent également d’autres options telles que la vue en fil de fer.</p>
+help.gps=GPS
+help.createOsmMap=<p>Créez des données de carte OSM en utilisant en calque de fond les traces GPS fournies par d’autres personnes.</p>
+help.myGps=MonGPS
+help.displayGps=<p>Affichez les traces GPS que vous avez téléversées précédemment sur OpenStreetMap.</p>
+help.undoRedo=Défaire / Refaire
+help.madeMistake=<p>Vous avez commis une erreur ? Cliquez simplement sur Défaire ou Refaire pour corriger vos modifications.</p>
+help.help=Aide
+help.guideInfomation=<p>Fournit ce guide au cas où vous auriez besoin d’informations lorsque vous débutez dans vos modifications.</p>
+help.save=Enregistrer
+help.addingFeatures=Ajout d’objets sur la carte
+help.addingFeaturesText=<p><i>Avant de commencer, la première règle que vous devez savoir concerne l’utilisation des données propriétaires. L’insertion de données cartographiques protégées par le droit d’auteur (copyright) ou des droits voisins (notamment le droit des bases de données), ou de toute autre donnée propriétaire n’est pas autorisée ! La copie, le retraçage ou toute reproduction d’œuvres protégées sont interdits ! (Source : <a href="http://wiki.openstreetmap.org/wiki/Copyright" target="_blank">Copyright - OpenStreetMap Wiki</a>)</i></p>\n<p></p>\n<p>Les objets linéaires tels que des rues, sentiers pédestres, chemins de fer et contours de bâtis seront ci-après nommés comme des <b>chemins</b>.</p>\n<p>Si vous vous apercevez soudainement que votre barre latérale d’icônes a disparu, c’est parce que vous avez un objet sélectionné sur la carte. Désélectionnez-le tout simplement en cliquant sur une zone vide de la carte pour faire apparaître les icônes à nouveau.</p>\n<p><b>Pour créer un point (ou nœud)</b>, il suffit de glisser et déplacer l’icône appropriée de la barre latérale sur la carte. Consultez « Ajouter des POIs » pour en savoir plus sur la création d’un POI (point d’intérêt)</p>\n<p><b>Pour créer un chemin</b>, commencez en cliquant sur la carte à son point de départ, puis cliquez sur chaque point successif. Double-cliquez pour terminer le tracé ou appuyez sur Entrée.</p>\n<p><b>Pour créer un polygone</b>, commencez en cliquant sur la carte à son point de départ, puis cliquez sur chaque point successif (de façon similaire à la création d’un chemin) et terminez en cliquant sur le premier point pour fermer le polygone.</p>\n<p>N’oubliez pas, si vous faites une erreur, vous pouvez toujours frapper le bouton Annuler. L’appui sur la touche Échap annulera toutes vos modifications sur l’objet actuellement sélectionné.</p>
+help.editBeg=Modifs. (déb.)
+help.editingFeatures=Fonctionnalités de modification (débutant)
+help.editingFeaturesText=<p><b>Pour ajouter un point à un chemin existant</b>, sélectionnez le chemin et cliquez en pressant la touche Maj à l’endroit voulu.</p>\n<p><b>Pour supprimer un point</b>, sélectionnez le point et cliquez sur le bouton « Supprimer l’élément » dans le coin inférieur droit ou appuyez sur la touche Suppr (ou Retour arrière) de votre clavier.</p>\n<p><b>Pour supprimer un chemin</b>, sélectionnez le chemin et cliquez le bouton « Supprimer l’élément » dans le coin inférieur droit ou appuyez sur les touches Maj+Suppr (ou Maj+Retour arrière) de votre clavier.</p>\n<p><b>Pour déplacer un point</b>, cliquez et faites glisser le point.</p>\n<p><b>Pour déplacer un chemin</b>, cliquez et faites glisser l’élément entier (Astuce : prenez un segment où vous ne déplacerez pas accidentellement un nœud).</p>\n<p><b>Pour étendre un chemin</b>, cliquez sur l’un des points d’extrémité du chemin. Puis continuez de dessiner les autres points comme d’habitude.</p>\n<p><b>Pour ajouter un nouveau chemin connecté à un chemin existant</b>, cliquez sur un des points du chemin en pressant la touche Maj. Puis continuez de dessin comme d'habitude.</p>
+help.editAdv=Modifs. (av.)
+help.editingFeaturesAdv=Fonctionnalités de modification (avancées)
+help.editingFeaturesAdvText=<p><b>Pour scinder un chemin</b>, sélectionnez le point auquel vous souhaitez couper et cliquez sur les Ciseaux de la boîte d’outils ou tapez la touche X de votre clavier. (Astuce : ajoutez d’abord un premier nœud sur le chemin afin de couper entre deux nœuds existants.)</p>\n<p><b>Pour effectuer une jonction entre deux chemins</b>, tracez comme d’habitude jusqu’à ce que vous deviez faire la jonction. Puis lorsque vous déplacerez votre souris sur un autre chemin, ses points s’allumeront en bleu. Cliquez sur un des points bleus ou tout autre endroit désiré sur le chemin pour réaliser la jonction.</p>\n<p><b>Pour déconnecter une jonction</b>, sélectionnez le point sur le chemin que vous souhaitez modifier. Puis pressez la touche Moins (−) de votre clavier pour ôter le point du chemin.</p>\n<p><b>Pour inverser la direction d’un chemin</b>, cliquez sur le bouton « Inverser la direction » en bas à droite. La direction d'un chemin n’a d’intérêt que pour des objets avec une balise <code>oneway</code> — rues à sens unique, lignes de côtes, îles, etc.</p>\n<p><b>Pour créer un chemin parallèle</b>, sélectionnez le chemin et cliquez sur le bouton « Créer un chemin parallèle » dans le coin inférieur droit ou pressez la touche P de votre clavier.</p>\n<p><b>Pour créer un chemin qui partage des nœuds avec un chemin existant</b>, commencez le tracé normalement, cliquez sur les deux premiers nœuds partagés, puis appuyez sur la touche F de votre clavier pour suivre automatiquement les nœuds successifs du chemin existant.</p>\n<p><i>Visitez <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer" target="_blank">Potlatch 2 Primer</a> sur le wiki d’OpenStreetMap pour connaître des méthodes et conventions de modification encore plus avancées.</i></p>
+help.tag=Balise
+help.taggingFeatures=Fonctionnalité de balisage
+help.taggingFeaturesText=<p>Avec Potlatch 2, le balisage d’objets est devenu relativement facile grâce à son utilisation de menus graphiques et de champs/icônes dédiés.</p>\n<p><b>Balisage d‘un objet</b></p>\n<p>Sélectionnez le point ou le chemin que vous souhaitez modifier, et choisissez la balise appropriée dans la barre latérale gauche. Après le balisage de l’objet, certains champs de base devraient apparaître tels que le nom, la limite de vitesse et la largeur, selon la balise vous avez donnée. Remplissez-les autant que vous le pouvez.</p>\n<p>Des utilisateurs avancés peuvent remarquer l’absence de quelques balises et de valeurs de balises qu’ils utilisent parfois. Si c’est le cas, cliquez sur l’onglet « Options avancées » en bas de la barre latérale et modifiez/ajoutez les balises selon vos besoins.</p>\n<p>Le wiki d’OpenStreetMap fournit également une <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">liste exhaustive et documentée des balises et des valeurs de balise</a>. Veuillez vous référer à la documentation d’OSM si vous ne savez pas quelle balise utiliser.</p>
+help.shortcuts=Raccourcis
+help.keyboardShortcuts=Raccourcis clavier
index 00a10fbfc196858fb3ab07a9b4138de5a1516eac..73d5e856ff9005672241a3c405bfec2cf5d214d0 100644 (file)
@@ -1,14 +1,44 @@
-# fr_FR resources file
+# Messages for French (Français)
+# Exported from translatewiki.net
+# Author: Verdy p
 
-main.undo = Défaire
-main.redo = Refaire
-main.background = Arrière-plan
-main.map_style = Style de Carte
-main.gps_data = GPS Informations
-main.my_tracks = Mes Pistes
-main.clear_gps = Effacer
-main.help = Assistance
-main.options = Options
-main.save = Enregistrer
-
-tag_viewer.dndprompt = Ajouter de nouveaux points en les faisant glisser sur la carte
+main.undo=Défaire
+main.redo=Refaire
+main.background=Arrière-plan
+main.map_style=Style de Carte
+main.gpsButton=Données GPS
+main.gps_data=GPS Informations
+main.my_tracks=Mes Pistes
+main.clear_gps=Effacer
+main.help=Assistance
+main.options=Options
+main.save=Enregistrer
+tag_viewer.dndprompt=Ajouter de nouveaux points en les faisant glisser sur la carte
+toolbox.delete_node=Supprimer le nœud (Suppr)
+toolbox.delete_area=Supprimer la zone (Maj+Suppr)
+toolbox.delete_way=Supprimer le chemin (Maj+Suppr)
+toolbox.delete_item=Supprimer l’élément
+toolbox.reverse_direction=Inverser le chemin (V)
+toolbox.split_way=Scinder le chemin (X)
+toolbox.merge_ways=Fusionner les chemins
+toolbox.straighten_way=Aligner les nœuds
+toolbox.make_circular=Placer les nœuds en cercle
+toolbox.make_right_angled=Rendre une forme orthogonale (Q)
+toolbox.create_parrallel_way=Créer un chemin parallèle (P)
+oauth.gotLinkBox=Cliquez sur le lien ci-dessous pour ouvrir une page web où il vous sera demandé d’autoriser l’accès par cette application.
+oauth.authorized=Une fois que vous aurez autorisé l’accès, cliquez le bouton « Essayer l’accès » ci-dessous
+oauth.deniedLabel=<b>L’accès a été refusé, veuillez vérifier et essayer à nouveau</b>
+oauth.rememberMe=Se souvenir de moi
+oauth.permFail=<p>Le serveur a rejeté les informations d’identification de cette application — un lien d’autorisation n’a pas pu être obtenu.</p>\n<p><b>L’accès OAuth ne sera pas possible.</b></p>\n<p>Contactez le fournisseur de l’application pour savoir ce qui se passe.</p>
+oauth.tempFail=Un problème est survenu en contactant le serveur afin d’obtenir l’autorisation. Ceci peut être une erreur temporaire, veuillez réessayer plus tard.
+oauth.tryAccessButton=Essayer l’accès
+oauth.cancelButton=Annuler
+save.editDescription=Veuillez entrer une description de vos modifications. Cela servira à donner aux autres cartographes une idée des changements que vous effectuez.
+styleSelector.editButton=Modifier...
+backgroundSelector.dim=assombrir
+backgroundSelector.sharpen=accentuer le contraste
+backgroundSelector.editButton=Modifier...
+backgroundSelector.vectorButton=Fichier vectoriel...
+options.tbcheck=Afficher la boîte à outils
+options.cursorcheck=Utiliser les curseurs personnalisés
+options.ok=Valider
diff --git a/l10n/locale/he/help_dialog.properties b/l10n/locale/he/help_dialog.properties
new file mode 100644 (file)
index 0000000..448b11d
--- /dev/null
@@ -0,0 +1,25 @@
+# Messages for Hebrew (עברית)
+# Exported from translatewiki.net
+# Author: Amire80
+
+help.gettingStarted=תחילת עבודה
+help.welcome=ברוך בואך
+help.whyOpenstreetmap=<p><b>למה OpenStreetMap?&rlm;</b> OSM הוא שירות המיפוי שבו כל הנתונים מתעדכנים ונערכים ללא הרף על־ידי אנשים רגילים כמוך. היתרון הברור הוא שזה חופשי לשימוש, אבל המיזם הזה הפך גם לשחקן בולט במיפוי בעת משבר (למשל, השימוש בנתוני OSM כדי לתאם את מאמצי הסיוע ברעידת האדמה בהאיטי). דיוק הנתונים חיוני, ואנו מקווים שיש לך זמן לנדב לזה!</p>
+help.activeMembers=<p><b>+ לחברי OpenStreetMap פעילים</b>, נא להירשם ל־OSM לפני עריכה</b></p>
+help.introduction=מבוא
+help.controls=פקדים
+help.interfaceControls=פקדי ממשק
+help.gps=GPS
+help.myGps=MyGPS
+help.undoRedo=ביטול / ביצוע חוזר
+help.help=עזרה
+help.save=שמירה
+help.addingFeatures=הוספת תכונות
+help.editBeg=עריכה (למתחילים)
+help.editingFeatures=עריכת תכונות (למתחילים)
+help.editAdv=עריכה (למתקדמים)
+help.editingFeaturesAdv=עריכת תכונות (למתקדמים)
+help.tag=תג
+help.taggingFeatures=תיוג תכונות
+help.shortcuts=קיצורי דרך
+help.keyboardShortcuts=קיצורי מקשים
diff --git a/l10n/locale/he/p2_main.properties b/l10n/locale/he/p2_main.properties
new file mode 100644 (file)
index 0000000..849f3c4
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Hebrew (עברית)
+# Exported from translatewiki.net
+# Author: Amire80
+
+main.undo=ביטול
+main.redo=ביצוע חוזר
+main.background=רקע
+main.map_style=סגנון מפה
+main.gpsButton=נתוני GPS
+main.gps_data=נתוני GPS
+main.my_tracks=השבילים שלי
+main.clear_gps=ניקוי
+main.help=עזרה
+main.options=אפשרויות
+main.save=שמירה
+tag_viewer.dndprompt=נקודות חדשות נוספות באמצעות גרירתן למפה
+toolbox.delete_node=מחיקת צומת (Delete)
+toolbox.delete_area=מחיקת אזור (Shift+Delete)
+toolbox.delete_way=מחיקת דרך (Shift+Delete)
+toolbox.delete_item=מחיקת פריט
+toolbox.reverse_direction=היפוך כיוון (V)
+toolbox.split_way=פיצול דרך (X)
+toolbox.merge_ways=מיזוג דרכים
+toolbox.straighten_way=יישור דרך
+toolbox.make_circular=הפיכה למעגלי
+toolbox.make_right_angled=להפוך לישר־שווית (Q)
+toolbox.create_parrallel_way=יצירת דרך מקבילה (P)
+oauth.gotLinkBox=לחיצה על הקישור להלן תפתח דף שיבקש ממך אישור גישה ליישום הזה.
+oauth.authorized=אחרי שאישרת גישה, נא ללחוץ על כפתור „לנסות לגשת” להלן
+oauth.deniedLabel=<b>הגישה נדחתה, נא לבדוק, ולנסות שוב</b>
+oauth.rememberMe=לזכור אותי
+oauth.permFail=<p>השרת סירב למידע הכניסה של היישום הזה – לא ניתן להשיג את קישור האישור.              </p>\n<p>       <b>גישת OAuth לא תתאפשר.</b>        </p>\n<p>       נא ליצור קשר עם ספק היישום כדי להבין מה קורה.</p>
+oauth.tempFail=הייתה בעיה ביצירת קשר עם השרת לקבלת אישור. ייתכן שזאת טעות זמנית, נא לנסות שוב מאוחר יותר.
+oauth.tryAccessButton=לנסות לגשת
+oauth.cancelButton=ביטול
+save.editDescription=נא להזין תיאור של העריכות שלך. זה יעזור לממפים אחרים להבין אילו שינויים עשית.
+styleSelector.editButton=עריכה...
+backgroundSelector.dim=עמעום
+backgroundSelector.sharpen=חידוד
+backgroundSelector.editButton=עריכה...
+backgroundSelector.vectorButton=קובץ וקטורי...
+options.tbcheck=הצגת ארגז הכלים
+options.cursorcheck=שימוש בסמנים מותאמים אישית
+options.ok=אישור
diff --git a/l10n/locale/hsb/help_dialog.properties b/l10n/locale/hsb/help_dialog.properties
new file mode 100644 (file)
index 0000000..ee91f08
--- /dev/null
@@ -0,0 +1,23 @@
+# Messages for Upper Sorbian (Hornjoserbsce)
+# Exported from translatewiki.net
+# Author: Michawiki
+
+help.gettingStarted=Prěnje kroki
+help.welcome=Witaj
+help.introduction=Zawod
+help.controls=Wobsłužowanske elementy
+help.interfaceControls=Wobsłužowanske elementy wužiwarskeho powjercha
+help.gps=GPS
+help.myGps=MyGPS
+help.undoRedo=Cofnyć/Wospjetować
+help.help=Pomoc
+help.save=Składować
+help.addingFeatures=Přidawanje funkcijow
+help.editBeg=Wobdźěłać (započatkarjo)
+help.editingFeatures=Wobdźěłowanske funkcije (započatkarjo)
+help.editAdv=Wobdźěłać (pokročeni)
+help.editingFeaturesAdv=Wobdźěłowanske funkcije (pokročeni)
+help.tag=Woznamjenić
+help.taggingFeatures=Funkcije za markěrowanje
+help.shortcuts=Skrótšenki
+help.keyboardShortcuts=Tastaturowe skrótšenki
diff --git a/l10n/locale/hsb/p2_main.properties b/l10n/locale/hsb/p2_main.properties
new file mode 100644 (file)
index 0000000..52487cd
--- /dev/null
@@ -0,0 +1,38 @@
+# Messages for Upper Sorbian (Hornjoserbsce)
+# Exported from translatewiki.net
+# Author: Michawiki
+
+main.undo=Cofnyć
+main.redo=Wospjetować
+main.background=Pozadk
+main.map_style=Kartowy stil
+main.gpsButton=GPS-daty
+main.gps_data=GPS-daty
+main.my_tracks=Moje čary
+main.clear_gps=Wuprózdnić
+main.help=Pomoc
+main.options=Opcije
+main.save=Składować
+tag_viewer.dndprompt=Přidaj nowe dypki ćahajo je na kartu
+toolbox.delete_node=Suk zhašeć (Entf)
+toolbox.delete_area=Přestrjeń zhašeć (Umsch+Entf)
+toolbox.delete_way=Puć zhašeć (Umsch+Entf)
+toolbox.delete_item=Element zhašeć
+toolbox.reverse_direction=Směr wobroćić (V)
+toolbox.split_way=Puć dźělić (X)
+toolbox.merge_ways=Puće zwjazać
+toolbox.straighten_way=Puć zrunać
+toolbox.make_circular=Kružnje rjadować
+toolbox.make_right_angled=Prawokutnje rjadować
+toolbox.create_parrallel_way=Paralelny puć wutworić (p)
+oauth.deniedLabel=<b>Přistup je so wotpokazał, prošu přepruwuj a spytaj hišće raz</b>
+oauth.rememberMe=Spomjatkować sej
+oauth.tryAccessButton=Přistup spytać
+oauth.cancelButton=Přetorhnyć
+styleSelector.editButton=Wobdźěłać...
+backgroundSelector.sharpen=wótřić
+backgroundSelector.editButton=Wobdźěłać...
+backgroundSelector.vectorButton=Vektorowa dataja...
+options.tbcheck=Gratowy kašćik pokazać
+options.cursorcheck=Swójske kursory wužiwać
+options.ok=W porjadku
diff --git a/l10n/locale/ja_JP/help_dialog.properties b/l10n/locale/ja_JP/help_dialog.properties
new file mode 100644 (file)
index 0000000..1ce1082
--- /dev/null
@@ -0,0 +1,36 @@
+# Messages for Japanese (日本語)
+# Exported from translatewiki.net
+
+help.gettingStarted=はじめよう
+help.welcome=ようこそ
+help.whyOpenstreetmap=<p><b>なぜ OpenStreetMapなのか?</b> OSM は、すべてのデータが、あなたのような人々の手で、いつも更新され、編集される地図作成サービスです。明らかなメリットは、自由かつ無料でつかえるということです。でも、それだけにとどまらず、震災時のマッピングにも活躍するのです。 (例 OSMを東日本大震災の救援活動に使用したsinsai.infoや、ハイチ大震災の救援活動のように)。このデータの正確さは非常に重要です。そして、あなたがボランティアとして、少しの時間を活動に当ててくれることを希望しています!</p>
+help.activeMembers=<p><b>そして、OpenStreetMapメンバーのみなさんは</b>, 編集前にOSM.orgにサインインしてください。</p>
+help.newMembers=<p><b>そして、新しいメンバーのみんさん</b>! まず、 <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> へ、行って本家アカウントを作ってください。そして、ログインしてください。アカウント作成にはライセンスと規約に同意いただく必要があります。そして、ここにもどってきて、Potlatch2 で編集しましょう。</p>
+help.introText=<p><b>Potlatch2</b> は、 OpenStreetMap (OSM)エディターです。これは、直接{0}のWebサイトから編集できるようにするものです。</p>
+help.introduction=イントロ
+help.controls=制御
+help.interfaceControls=インターフェース制御
+help.mapBackground=<p>一覧から地図背景を選択してください。あるいは、自身で準備したベクターファイルを使用することもできます。</p>
+help.colourStyle=<p>Choose the style in which you wish to view the map. Colours and overall style vary and also includes other options like wireframe.</p>
+help.gps=GPS
+help.createOsmMap=<p>Create OSM map data using other people's GPS tracks as a background</p>
+help.myGps=MyGPS
+help.displayGps=<p>Display GPS traces that you've previously uploaded to OpenStreetMap.</p>
+help.undoRedo=Undo / Redo
+help.madeMistake=<p>Made a mistake? Just hit undo and/or redo to correct your edits.</p>
+help.help=ヘルプ
+help.guideInfomation=<p>Brings up this guide in case you need any information as you begin editing.</p>
+help.save=保存
+help.addingFeatures=Adding Features
+help.addingFeaturesText=<p><i>始める前に、知っているべき最初のルールは、商用データ使用についてです。著作権のある地図や他の商用データからのデータ使用は強く禁止されています!! 著作権のある製品は、コピー、トレース、あるいはどのような方法でも、許されません!(Source: <a href="http://wiki.openstreetmap.org/wiki/Copyright" target="_blank">Copyright - OpenStreetMap Wiki</a>)</i></p>  <p></p>  <p> 道路, 歩道, 鉄道、ビル外周などの線として表される地物は、ここでは<b>ウエイ</b>として表現されます。</p>  <p>もし、あなたのサイドバーのすべてのアイコンが無くなってしまったら、その時は地図の地物が選択されています。単純に地図の何もないところをクリックして選択解除することで、アイコンは復活します。</p>            <p><b>点(またはノード)を作るには</b>, アイコンをサイドバーから地図上の作りたい場所にドラッグアンドドロップしてください。 POI (Point of Interest)の追加についての詳細は、「POIを追加」を見てください。</p>   <p><b>ウエイを作成するには</b>, 地図上の開始点をクリックして、各節点をクリックしながら、終了点でダブルクリックするかエンターをおしてください。</p>            <p><b>To create a polygon</b>, begin by clicking on the map at its start point, then click at each successive point (similar to creating a way), and finish by clicking on the very first point to close the polygon.</p>            <p>Remember, if you make a mistake, you can always hit the Undo button. Pressing the Esc key will undo all your edits for the current feature.</p>
+help.editBeg=編集(簡易)
+help.editingFeatures=地物の編集 (ビギナー)
+help.editingFeaturesText=<p><b>既存のウエイに点を追加するには</b>、ウエイを選択肢、希望の点でシフト+クリックをしてください。</p>            <p><b>点を削除するには</b>、ウエイ上の点を選択して、右下の角にあるアイテム削除ボタンをクリックするか、キーボードのデリートキー(またはバックスペースキー)をおしてください。</p>  <p><b>ウエイを削除するには</b>、ウエイを選択して、右下の角にあるアイテム削除ボタンをクリックするか、キーボードのデリートキー(またはバックスペースキー)をおしてください。</p>            <p><b>点を移動するには</b>、クリックして点でドラッグしてください。</p>            <p><b>ウエイを移動するには</b>、click and drag the entire feature (hint: grab a segment where you won't accidentally move a node).</p>            <p><b>To extend a way</b>, click on one of the end points of the way. Then continue drawing as usual.</p>            <p><b>To add a new way extending from an existing way</b>, shift+click on one of the end points of the way. Then continue drawing as usual.</p>
+help.editAdv=編集(高度)
+help.editingFeaturesAdv=地物の編集(高度)
+help.editingFeaturesAdvText=<p><b>To split a way</b>, select the point at which you want to cut, and click the Scissor tool or press X on your keyboard. (Hint: Add a node first in order to cut between nodes.)</p>            <p><b>To make a junction between two ways</b>, draw as usual until you need to make a junction. Then as you move your mouse over another way, the points will light up blue. Click on one of the blue points or any other desired location on the way to make a junction.</p>            <p><b>To disconnect a junction</b>, select the point on the way you wish to alter. The press - on your keyboard to remove the point.</p>            <p><b>To reverse the direction of a way</b>, click the Reverse Direction button in the bottom right corner. The direction of a way is only a concern for those features with a "oneway" tag - oneway streets, coastlines, islands, and so on.</p>            <p><b>To create a way running parallel</b>, select the way and click the Create Parallel Way button in the bottom right corner or press P on your keyboard.</p>     <p><b>To create a way that shares nodes with an existing way</b>, start drawing, click the first two shared nodes, then press F to automatically follow the existing way.</p>            <p><i>Visit the <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer" target="_blank">Potlatch2 Primer</a> on the OpenStreetMap wiki for even more advanced editing methods and conventions.</i></p>
+help.tag=Tag
+help.taggingFeatures=Tagging Features
+help.taggingFeaturesText=<p>With Potlatch2, tagging features has become relatively easy with its use of graphical menus and dedicated fields/icons.</p>          <p><b>Tagging a feature</b></p>          <p>Select the point or way that you wish to edit, adn choose the appropriate tag from the left sidebar. After tagging the feature, some basic fields should appear such as Name, Speed Limit, and Width, depending on the tag you gave. Fill these out as best you can.</p><p>Advanced users may notice the absence of a few tags and tag values they occasionally use. If this is the case, click on the Advanced tab at the bottom of the sidebar and edit/add as necessary.</p>          <p>The OpenStreetMap wiki also provides an <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">extensive list of tags and tag values</a>. Please refer back to the OSM documentation if you are unsure of which tag to use.</p>
+help.shortcuts=Shortcuts
+help.keyboardShortcuts=Keyboard Shortcuts
diff --git a/l10n/locale/ja_JP/p2_main.properties b/l10n/locale/ja_JP/p2_main.properties
new file mode 100644 (file)
index 0000000..04b32dc
--- /dev/null
@@ -0,0 +1,43 @@
+# Messages for Japanese (日本語)
+# Exported from translatewiki.net
+
+main.undo=戻す
+main.redo=やり直し
+main.background=背景
+main.map_style=地図スタイル
+main.gpsButton=GPSデータ
+main.gps_data=GPSデータ
+main.my_tracks=自分のデータ
+main.clear_gps=クリアー
+main.help=ヘルプ
+main.options=オプション
+main.save=保存
+tag_viewer.dndprompt=新規ポイントを地図にドラッグすることで作成
+toolbox.delete_node=ノードを削除 (Delete)
+toolbox.delete_area=エリアを削除 (Shift+Delete)
+toolbox.delete_way=ウエイを削除 (Shift+Delete)
+toolbox.delete_item=アイテムを削除
+toolbox.reverse_direction=方向を反転 (V)
+toolbox.split_way=ウエイを分割 (X)
+toolbox.merge_ways=ウエイを結合
+toolbox.straighten_way=ウエイをまっすぐに
+toolbox.make_circular=環状にする
+toolbox.make_right_angled=右向きにする (Q)
+toolbox.create_parrallel_way=パラレルウエイを作成 (P)
+oauth.gotLinkBox=次のリンクをクリックして開くウエブページで、このアプリへのアクセスを承認してください。
+oauth.authorized=一度アクセスが承認されたら以下の「アクセスする」ボタンをおしてください。
+oauth.deniedLabel=<b>アクセスが拒否されたら、ドキュメントを確認して再度やってみてください。</b>
+oauth.rememberMe=覚えておく
+oauth.permFail=<p>サーバがこのアプリケーションの証明書を拒否しているとき、承認リンクはでてきません。 </p><p><b>OAuthアクセスはできません。</b>      </p><p>アプリケーションベンダーにどうすればいいか、確認してください。</p>
+oauth.tempFail=認証サーバへの接続に失敗しました。問題があるようです。おそらく一時的なものなので、時間をおいて試してみてください。
+oauth.tryAccessButton=アクセスする
+oauth.cancelButton=キャンセル
+save.editDescription=編集の説明を入れてください。これは他のマッパーがあなたが何をしようとしたか、あとで理解するときに使われます。
+styleSelector.editButton=編集...
+backgroundSelector.dim=dim
+backgroundSelector.sharpen=シャープ化
+backgroundSelector.editButton=編集...
+backgroundSelector.vectorButton=ベクターファイル...
+options.tbcheck=ツールボックス表示
+options.cursorcheck=カスタムカーソルを使う
+options.ok=Ok
diff --git a/l10n/locale/mk/help_dialog.properties b/l10n/locale/mk/help_dialog.properties
new file mode 100644 (file)
index 0000000..fe85ed0
--- /dev/null
@@ -0,0 +1,37 @@
+# Messages for Macedonian (Македонски)
+# Exported from translatewiki.net
+# Author: Bjankuloski06
+
+help.gettingStarted=Како да почнете
+help.welcome=Добредојдовте
+help.whyOpenstreetmap=<p><b>Зошто OpenStreetMap?</b> OSM е картографска служба каде сите податоци постојано се подновуваат, а уредувањата ги вршат обични луѓе како Вас. Очигледната предност е тоа што е бесплатна за употреба, но денес е од голема важност и при справувањето со вонредни состојби (на пр. кога нашите податоци се користеа за усогласување на дејствата за помош во земјотересот на Хаити). Точноста на податоците е од суштинско значење, па се надеваме дека ќе можете да посветите дел од Вашето време!</p>
+help.activeMembers=<p><b>+ Активни членови на OpenStreetMap:</b>најавете се на OSM пред да уредувате.</p>
+help.newMembers=<p><b>+ Нови членови:</b>посетете го <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> и направете сметка, најавете се, а потоа вратете се тука за да пристапите на Potlatch 2 и да почнете со уредување.</p>
+help.introText=<p><b>Potlatch2</b> е уредник за OpenStreetMap (OSM) што ви овозможува да уредувате непосредно преку страницата {0}.</p>
+help.introduction=Вовед
+help.controls=Контроли
+help.interfaceControls=Контроли на посредникот
+help.mapBackground=<p>Од списокот одберете позадина на картата или пак ставете своја векторска податотека.</p>
+help.colourStyle=<p>Одберете во кој стил сакате да ви се прикажува картата. Постојат различни бои и сеопшт изглед, а има и други можности како да речеме решетка.</p>
+help.gps=GPS
+help.createOsmMap=<p>Создавајте картографски податоци на OSM користејќи туѓи GPS-траги како позадина</p>
+help.myGps=МојGPS
+help.displayGps=<p>Ги прикажува GPS-трагите што претходно сте ги подигнале на OpenStreetMap.</p>
+help.undoRedo=Врати / Повтори
+help.madeMistake=<p>Направивте некоја грешка? Само стиснете на „врати“ и/или „повтори“ за да ја исправите.</p>
+help.help=Помош
+help.guideInfomation=<p>Го истакнува овој водич во случај да ви затреба некоја информација кога почнувате со уредување.</p>
+help.save=Зачувај
+help.addingFeatures=Додавање на функции
+help.addingFeaturesText=<p><i>Пред да почнете, најважно е да знаете за сопственички податоци. Податоците од карти заштитени со авторски права и секакви други заштитени подацови се строго забранети! Не е дозволено копирање, прецртување и секакво умножување на заштитени дела! (Извор: <a href="http://wiki.openstreetmap.org/wiki/Mk:Copyright?uselang=mk" target="_blank">Авторски права - Вики на OpenStreetMap</a>)</i></p>\n  <p></p>\n  <p>Линеарните елементи како улици, пешачки патеки, пруги и контури на објекти тука се дефинираат како <b>патишта</b>.</p>\n  <p>Доколку наеднаш ви ја снема страничната лента сосе сите икони, тоа значи дека имате одбрано некој елемент на картата. Едноставно стиснете на празен простор на картата за да си ги повратите иконите.</p>\n            <p><b>З да создадете точка (или јазол)</b>, едноставно повлечете ја соодветната икона од лентата и пуштете ја на картата. Погл. Додавање на точки од интерес (POI) за да дознаете повеќе за ваквите точки</p>\n            <p><b>За да создадете пат</b>, стиснете на картата во местото кајшто сакате да почнува, а потоа стискајте на секоја следна точка. Стиснете двојно за да ја завршите линијата, или притиснете Enter.</p>\n            <p><b>За да создадете многуаголник</b>, стиснете на картата во местото кајшто сакате да почнува, а потоа стискајте на секоја следна точка (слично како за пат), а на крај стиснете на најпрвата точка за да го затворите многуаголникот.</p>\n            <p>Запомнете дека ако направите грешка, секогаш ви е на располагање копчето „Врати“. Со копчето Esc ќе ги вратите сите извршени измени во тековниот елемент.</p>
+help.editBeg=Уредување (почет.)
+help.editingFeatures=Функции за уредување (почетнички)
+help.editingFeaturesText=<p><b>За да му додадете точка на постоечки пат</b> - изберете го и стиснете shift+клик на саканото место.</p>\n    <p><b>За да избришете точка</b> - изберете го патот, па стиснете на копчето „Избриши елемент“ во долниот десен агол или притиснете на копчето Delete (или копчето за назад) на тастатурата.</p>\n  <p><b>За да избришете пат</b> - изберете го патот, па стиснете на копчето „Избриши елемент“ во долниот десен агол или притиснете shift+Delete (или  shift+копче за назад) на тастатурата.</p>\n    <p><b>За да преместите точка</b> - стиснете на неа и повлечете ја.</p>\n   <p><b>За да преместите пат</b> - стиснете и повлечете го целиот елемент (совет: стиснете во отсечка каде нема да наидете на јазол).</p>\n  <p><b>За да продолжите пат</b> - стиснете на една од крајните точки на него. Потоа продолжете нормално да цртате.</p>\n    <p><b>За да додадете пат што ќе продолжува од постоечки пат</b> - shift+клик на една од крајните точки на патот. Потоа продолжите нормално да цртате.</p>
+help.editAdv=Уредување (напр.)
+help.editingFeaturesAdv=Функции за уредување (напредни)
+help.editingFeaturesAdvText=<p><b>За да раздвоите пат</b> - одберете во која точка сакате патот да се пресече, па стиснете на алатката Ножици или притиснете на копчето X на тастатурата. (помош: Прво додајте јазол за да можете да пресечете помеѓу јазлите.)</p>\n            <p><b>За да направите спој на два пата</b> - цртајте нормално додека не ви притреба спојот. Потоа, како што го движите глушецот на друга страна, точките ќе светнат со сино. Стиснете на една од сините точки или некое друго поаскувано место на патот за да направите спој.</p>\n            <p><b>За да раздвоите спој</b> - одберете ја точката на патот што сакате да го измените. Потоа притиснете на копчето - (минус) на тастатурата за да ја отстраните точката.</p>\n            <p><b>За да ја смените насоката на пат</b> - стиснете на копчето „Смени насока“ во долниот десен агол. Насоката на патот е важна само кај оние елементи со ознаката „еднонасочно“ - еднонасочни улици, крајбрежја, острови и тн.</p>\n            <p><b>За да создадете паралелен пат</b> - одберете го патот и стиснете на копчето „Создај паралелен пат“ во долниот десен агол или пак стиснете на копчето P на тастатурата.</p>\n     <p><b>За да создадете пат што дели јазли со постоечки пат</b> - почнете да цртате, стиснете на првите два заеднички јазла, а потоа стиснете на F за автоматски да се проследи постоечкиот пат.</p>\n            <p><i>Уште понапредни начини на уредување ќе најдете на страницата <a href="http://wiki.openstreetmap.org/wiki/Potlatch_2/Primer" target="_blank">Учебник за Potlatch2</a> на викито на OpenStreetMap.</i></p>
+help.tag=Означување
+help.taggingFeatures=Функции за означување
+help.taggingFeaturesText=<p>Со Potlatch2, означувањето на елементите стана релативно лесно поради неговите графички менија и наменски полиња/икони.</p>\n          <p><b>Означување на елемент</b></p>\n          <p>Одберете ја точката или патот што сакате да го уредите, па изберете ја соодветната ознака од страничната лента лево. Откако ќе ја ставите ознаката, треба да се појават некои основни полиња како „Име“,  „Брзинско ограничување“ и „Ширина“, зависно од ознаката. Пополнете ги најдобро што знаете.</p><p>Напредните корисници можат да забележат дека отсуствуваат некои ознаки и вредности што понекогаш ги користат. Доколку се случи ова, стиснете на јазичето „Напредно“ на дното од страничната лента, па на уреди/додај.</p>\n          <p>Викито на OpenStreetMap нуди и <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">опширен список на ознаки и вредности</a>. Погледајте ја документацијата ако не сте сигурни која ознака треба да се употреби.</p>
+help.shortcuts=Кратенки
+help.keyboardShortcuts=Тастатурни кратенки
diff --git a/l10n/locale/mk/p2_main.properties b/l10n/locale/mk/p2_main.properties
new file mode 100644 (file)
index 0000000..c6b9ceb
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Macedonian (Македонски)
+# Exported from translatewiki.net
+# Author: Bjankuloski06
+
+main.undo=Врати
+main.redo=Повтори
+main.background=Позадина
+main.map_style=Стил на картата
+main.gpsButton=GPS-податоци
+main.gps_data=GPS-податоци
+main.my_tracks=Мои траги
+main.clear_gps=Исчисти
+main.help=Помош
+main.options=Нагодувања
+main.save=Зачувај
+tag_viewer.dndprompt=Додајте нови точки со тоа што ќе ги довлечете на картата
+toolbox.delete_node=Избриши јазол (Delete)
+toolbox.delete_area=Избриши подрачје (Shift+Delete)
+toolbox.delete_way=Избриши пат (Shift+Delete)
+toolbox.delete_item=Избриши елемент
+toolbox.reverse_direction=Смени насока (V)
+toolbox.split_way=Раздели пат (X)
+toolbox.merge_ways=Спој патишта
+toolbox.straighten_way=Исправи пат
+toolbox.make_circular=Направи кружно
+toolbox.make_right_angled=Направи нормално (Q)
+toolbox.create_parrallel_way=Создај паралелен пат (P)
+oauth.gotLinkBox=Стиснете на врската подолу за да отворите страница кадешто ќе ви биде побарано да го овластите пристапот на овој прилог.
+oauth.authorized=Откако ќе го овластите пристапот, стиснете на копчето „Пробај да пристапиш“ подолу.
+oauth.deniedLabel=<b>Пристапот е одбиен. Проверете и обидете се повторно</b>
+oauth.rememberMe=Запомни ме
+oauth.permFail=<p>Опслужувачот ги одби акредитивите на овој прилог -- не можев да добијам врска за овластување.          </p>\n<p>       <b>Нема да можете да пристапите на OAuth.</b>         </p>\n<p>       Обратете се кај добавувачот на прилогот за да дознаете во што е проблемот.</p>
+oauth.tempFail=Се појави проблем при поврзувањето со опслужувачот за овластување. Ова може да е привремена грешка, па затоа ве советуваме да се обидете подоцна.
+oauth.tryAccessButton=Пробај да пристапиш
+oauth.cancelButton=Откажи
+save.editDescription=Внесете опис на вашите уредувања. Така другите картографи ќе имаат претстава какви измени сте направиле.
+styleSelector.editButton=Уреди...
+backgroundSelector.dim=замати
+backgroundSelector.sharpen=заостри
+backgroundSelector.editButton=Уреди...
+backgroundSelector.vectorButton=Векторска податотека...
+options.tbcheck=Пок. алатник
+options.cursorcheck=Користи курсори по мој избор
+options.ok=ОК
diff --git a/l10n/locale/ms/help_dialog.properties b/l10n/locale/ms/help_dialog.properties
new file mode 100644 (file)
index 0000000..ca9f293
--- /dev/null
@@ -0,0 +1,37 @@
+# Messages for Malay (Bahasa Melayu)
+# Exported from translatewiki.net
+# Author: Anakmalaysia
+
+help.gettingStarted=Permulaan
+help.welcome=Selamat Datang
+help.whyOpenstreetmap=<p><b>Mengapa pilih OpenStreetMap?</b> OSM ialah sebuah perkhidmatan pemetaan di mana semua data sentiasa dikemaskinikan dan disunting oleh orang keramaian seperti anda. Yang bagusnya sekali, anda boleh menggunakannya secara percuma, tetapi ia juga telah memainkan peranan penting dalam pemetaan sewaktu bencana (cth. penggunaan data OSM untuk menyelaras usaha menyelamat di Haiti setelah dilanda gempa bumi). Ketepatan data ini adalah amat penting, dan kami berharap anda anda dapat meluangkan sedikit masa anda!</p>
+help.activeMembers=<p><b>+ Bagi ahli-ahli OpenStreetMap yang aktif</b>, sila daftar masuk ke dalam OSM sebelum menyunting.</p>
+help.newMembers=<p><b>+ Bagi ahli baru</b>, sila lawati <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> untuk membuka akaun, log masuk, kemudian balik ke sini untuk membenarkan akses kepada Potlatch 2 dan mula menyunting.</p>
+help.introText=<p><b>Potlatch2</b> ialah sebuah alat penyuntingan OpenStreetMap (OSM) yang membolehkan anda untuk membuat suntingan secara langsung melalui tapak sesawang {0}.</p>
+help.introduction=Pengenalan
+help.controls=Kawalan
+help.interfaceControls=Kawalan Antaramuka
+help.mapBackground=<p>Pilih latar belakang peta anda daripada salah satu perkara dalam senarai, atau tambahkan fail vektor anda sendiri.</p>
+help.colourStyle=<p>Pilih gaya yang mana anda ingin perlihatkan peta itu. Terdapat pelbagai pilihan warna dan gaya keseluruhan, juga disertakan pilihan-pilihan lain seperti "wireframe".</p>
+help.gps=GPS
+help.createOsmMap=<p>Hasilkan data peta OSM dengan menggunakan laluan GPS orang lain sebagai latar belakang</p>
+help.myGps=MyGPS
+help.displayGps=<p>Paparkan jejak-jejak GPS yang pernah anda muat naik ke OpenStreetMap.</p>
+help.undoRedo=Nyahbuat / Buat Balik
+help.madeMistake=<p>Tersilap? Tekan sahaja 'nyahbuat' dan/atau 'buat balik' untuk membetulkan suntingan anda.</p>
+help.help=Bantuan
+help.guideInfomation=<p>Menampilkan panduan ini sekiranya anda memerlukan sebarang maklumat apabila anda bermula menyunting.</p>
+help.save=Simpan
+help.addingFeatures=Menambahkan Bentuk Alam
+help.addingFeaturesText=<p><i>Sebelum bermula, peraturan pertama yang perlu anda tahu adalah tentang penggunaan data bermilik (</i>proprietary<i>). Data dari peta yang berhak cipta atau sebarang data bermilik yang lain adalah dilarang sama sekali! Dilarang menyalin, menyurih atau melakukan sebarang penghasilan semula bahan yang berhak cipta! (Sumber: <a href="http://wiki.openstreetmap.org/wiki/Copyright" target="_blank">Copyright - OpenStreetMap Wiki</a>)</i></p>\n  <p></p>\n  <p>Bentuk alam yang lelurus seperti jalan raya, lorong jalan kaki, landasan keretapi dan garis bentuk bangunan, adalah dipanggil <b>jalan</b>.</p>\n  <p>Jika anda sedar bahawa palang sisi dengan semua ikonnya tiba-tiba hilang, ini adalah kerana anda telah memilih suatu bentuk alam pada peta. Klik bahagian kosong pada peta sahaja untuk menyahpilih bentuk alam itu dan mengembalikan ikon-ikon itu.</p>\n            <p><b>Untuk meletakkan titik (atau nod)</b>, tarik dan lepas ikon yang berkenaan dari palang sisi kepada peta. Lihat 'Tambah POI' untuk keterangan lanjut tentang pembentukan POI (Point of Interest)</p>\n            <p><b>Untuk membuat jalan</b>, mula dengan mengklik titik mulanya di atas peta, kemudian klik setiap titik yang berturut-turut. Klik dua kali untuk siap atau tekan Enter.</p>\n            <p><b>Untuk membuat poligon</b>, mula dengan mengklik titik mulanya di atas peta, kemudian klik setiap titik yang berturut-turut (sama dengan membuat jalan), dan akhir sekali, klik pada titik yang pertama sekali untuk menyiapkan poligon.</p>\n            <p>Ingat, jika anda terbuat silap, anda boleh menekan butang Nyahbuat. Menekan Esc akan membatalkan semua suntingan anda bagi bentuk alam yang anda sedang usahakan itu.</p>
+help.editBeg=Sunting (Asas)
+help.editingFeatures=Menyunting Bentuk Alam (Asas)
+help.editingFeaturesText=<p><b>Untuk menambahkan titik pada jalan yang sedia ada</b>, pilih jalan yang berkenaan dan tekan shift+click pada lokasi yang dikehendaki.</p>\n    <p><b>Untuk memadamkan titik</b>, pilih titik yang berkenaan dan klik punat Hapuskan Perkara di sudut kanan bawah, atau tekan Delete (atau Backspace) pada papan kekunci anda.</p>\n  <p><b>Untuk memadamkan jalan</b>, pilih jalan yang berkenaan dan klik punat Hapuskan Perkara di sudut kanan bawah, atau tekan shift+Delete (atau shift+Backspace) pada papan kekunci anda.</p>\n    <p><b>Untuk mengalihkan titik</b>, klik dan seret titik berkenaan.</p>\n   <p><b>Untuk mengalihkan jalan</b>, klik dan seret seluruh bentuk berkenaan (petua: ambil satu segmen di mana anda tidak akan teralih nod).</p>\n  <p><b>Untuk menyambungkan jalan</b>, klik pada salah satu titik hujung jalan itu. Kemudian, teruskan kerja memeta seperti biasa.</p>\n    <p><b>Untuk membuat jalan baru yang bersambung dari jalan yang sedia ada</b>, tekan shift+click pada salah satu titik hujung jalan itu. Kemudian, teruskan kerja memeta seperti biasa.</p>
+help.editAdv=Sunting (Lanj.)
+help.editingFeaturesAdv=Menyunting Bentuk Alam (Lanjutan)
+help.editingFeaturesAdvText=<p><b>Untuk membelah jalan</b>, pilih titik di mana anda ingin potong, dan klik alatan Gunting atau tekan X pada papan kekunci. (Petua: Bubuh nod dahulu untuk memotong di antara nod.)</p>\n            <p><b>Untuk membuat simpang di antara dua jalan</b>, lukis jalan seperti biasa sehingga anda perlu membuat simpang. Kemudian, apabila menghalakan tetikus ke jalan yang lain, titik-titik itu bernyala biru. Klik pada salah satu titik biru itu atau sebarang lokasi yang diingini pada jalan itu untuk membuat simpang.</p>\n            <p><b>Untuk memutuskan simpang</b>, pilih titik pada jalan yang ingin anda ubah itu. Kemudian, tekan kekunci sengkang (-) pada papan kekunci anda untuk membuang titik berkenaan.</p>\n            <p><b>Untuk menterbalikkan arah jalan</b>, klik punat 'Terbalikkan arah' di sudut kanan bawah. Arah sesebuah jalan hanya berkenaan dengan bentuk-bentuk alam yang berteg "sehala", iaitu jalan sehala, garis pinggir laut, pulau dan sebagainya.</p>\n            <p><b>Untuk membuat jalan selari</b>, pilih jalan yang berkenaan dan klik punat 'Buat jalan selari' di sudut kanan bawah atau tekan kekunci P pada papan kekunci anda.</p>\n     <p><b>Untuk membuat jalan yang berkongsi nod dengan jalan yang sedia ada</b>, mula melukis, klik dua nod terkongsi yang pertama, kemudian tekan F untuk mengikuti jalan yang sedia ada itu secara automatik.</p>\n            <p><i>Lawati <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer" target="_blank">Potlatch2 Primer</a> di wiki OpenStreetMap untuk kaedah dan kelaziman penyuntingan yang lebih lanjut.</i></p>
+help.tag=Teg
+help.taggingFeatures=Mengeteg Bentuk Alam
+help.taggingFeaturesText=<p>Dengan Potlatch2, adalah lebih mudah untuk mengeteg bentuk alam dengan menggunakan menu grafik dan ruangan/ikon khusus.</p>\n          <p><b>Mengeteg bentuk alam</b></p>\n          <p>Pilih titik atau jalan yang ingin anda sunting, kemudian pilih tag yang sesuai dari palang sisi kiri. Setelah mengeteg bentuk alam itu, dijangka munculnya ruangan-ruangan asas seperti Nama, Had Laju, dan Lebar, berasaskan teg yang anda berikan. Isikan ruangan-ruangan itu sepenuh yang boleh.</p><p>Pengguna yang lebih berpengalaman mungkin akan mendapati ketiadaan beberapa teg dan nilai teg yang digunakan sekali-sekala. Jika begitu, klik tab Lanjutan di bawah palang sisi dan sunting/tambahkan apa yang perlu.</p>\n          <p>Wiki OpenStreetMap juga menyediakan satu <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">senarai teg dan nilai teg yang menyeluruh</a>. Sila rujuk kembali dokumentasi OSM jika anda tidak pasti teg yang mana harus digunakan.</p>
+help.shortcuts=Pintasan
+help.keyboardShortcuts=Pintasan Papan Kekunci
diff --git a/l10n/locale/ms/p2_main.properties b/l10n/locale/ms/p2_main.properties
new file mode 100644 (file)
index 0000000..58aedd8
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Malay (Bahasa Melayu)
+# Exported from translatewiki.net
+# Author: Anakmalaysia
+
+main.undo=Nyahbuat
+main.redo=Buat semula
+main.background=Latar belakang
+main.map_style=Gaya Peta
+main.gpsButton=Data GPS
+main.gps_data=Data GPS
+main.my_tracks=Laluan Saya
+main.clear_gps=Padamkan
+main.help=Bantuan
+main.options=Pilihan
+main.save=Simpan
+tag_viewer.dndprompt=Tambahkan titik baru dengan menyeretnya kepada peta
+toolbox.delete_node=Hapuskan nod (Delete)
+toolbox.delete_area=Hapuskan kawasan (Shift+Delete)
+toolbox.delete_way=Hapuskan jalan (Shift+Delete)
+toolbox.delete_item=Hapuskan perkara
+toolbox.reverse_direction=Terbalikkan arah
+toolbox.split_way=Pecahkan jalan (X)
+toolbox.merge_ways=Gabungkan jalan
+toolbox.straighten_way=Luruskan jalan
+toolbox.make_circular=Jadikan bulat
+toolbox.make_right_angled=Jadikan sudut tegak (Q)
+toolbox.create_parrallel_way=Buat jalan selari (P)
+oauth.gotLinkBox=Klik pautan di bawah untuk membuka laman web di mana anda akan diminta untuk membenarkan akses kepada aplikasi ini.
+oauth.authorized=Sebaik sahaja anda membenarkan akses itu, klik butang 'Cuba akses' di bawah
+oauth.deniedLabel=<b>Akses ditolak; sila semak dan cuba lagi</b>
+oauth.rememberMe=Ingati saya
+oauth.permFail=<p>Pelayan menolak watikah permohonan ini -- pautan kebenaran tidak dapat diperoleh.          </p>\n<p>       <b>Akses OAuth tidak dibenarkan.</b>            </p>\n<p>       Sila hubungi pembekal aplikasi untuk mengetahui masalahnya.</p>
+oauth.tempFail=Masalah dialami ketika menghubungi pelayan untuk memperoleh kebenaran. Ini mungkin ralat yang sementara; sila cuba lagi.
+oauth.tryAccessButton=Cuba akses
+oauth.cancelButton=Batalkan
+save.editDescription=Sila masukkan keterangan suntingan anda. Ini akan digunakan untuk menerangkan pemeta-pemeta yang lain tentang suntingan anda.
+styleSelector.editButton=Sunting...
+backgroundSelector.dim=kaburkan
+backgroundSelector.sharpen=perjelas
+backgroundSelector.editButton=Sunting...
+backgroundSelector.vectorButton=Fail vektor...
+options.tbcheck=Paparkan kotak alatan
+options.cursorcheck=Gunakan kursor tersuai
+options.ok=OK
diff --git a/l10n/locale/nb_NO/help_dialog.properties b/l10n/locale/nb_NO/help_dialog.properties
new file mode 100644 (file)
index 0000000..560e33d
--- /dev/null
@@ -0,0 +1,5 @@
+# Messages for Norwegian Bokmål (‪Norsk (bokmål)‬)
+# Exported from translatewiki.net
+
+help.gettingStarted=Kom i gang
+help.welcome=Velkommen
diff --git a/l10n/locale/nb_NO/p2_main.properties b/l10n/locale/nb_NO/p2_main.properties
new file mode 100644 (file)
index 0000000..fe2fe91
--- /dev/null
@@ -0,0 +1,45 @@
+# Messages for Norwegian Bokmål (‪Norsk (bokmål)‬)
+# Exported from translatewiki.net
+# Author: Dittaeva
+# Author: Gnonthgol
+
+main.undo=Angre
+main.redo=Gjør om
+main.background=Bakgrunn
+main.map_style=Kartstil
+main.gpsButton=GPS-data
+main.gps_data=GPS-data
+main.my_tracks=Mine spor
+main.clear_gps=Tøm
+main.help=Hjelp
+main.options=Innstillinger
+main.save=Lagre
+tag_viewer.dndprompt=Legg til nye punkt ved å dra dem over på kartet
+toolbox.delete_node=Slett node (Delete)
+toolbox.delete_area=Slett område (Shift+Delete)
+toolbox.delete_way=Slett veg (Shift+Delete)
+toolbox.delete_item=Slett element
+toolbox.reverse_direction=Snu retning (V)
+toolbox.split_way=Del veg (X)
+toolbox.merge_ways=Slå sammen veger
+toolbox.straighten_way=Rett opp veg
+toolbox.make_circular=Gjør sirkulær
+toolbox.make_right_angled=Gjør rettvinkla (Q)
+toolbox.create_parrallel_way=Lag parallell veg (P)
+oauth.gotLinkBox=Trykk på lenka under for å åpne ei nettside der du blir bedt om å godkjenne tilgang for dette programmet.
+oauth.authorized=Trykk på «Prøv tilgang»-knappen under, etter at du har godkjent tilgangen.
+oauth.deniedLabel=<b>Tilgang ble ikke gitt, undersøk brukeropplysningene og prøv om igjen.</b>
+oauth.rememberMe=Husk meg
+oauth.permFail=<p>Teneren nekta tilgang til dette programmet -- godkjenningslenke kunne ikke skaffes.        </p><p>         <b>OAuth-tilgang vil ikke være mulig.</b>         </p><p> Ta kontakt med leverandøren for å finne ut hva som er problemet.</p>
+oauth.tempFail=Det var problem med å få kontakt med teneren for å få godkjenning.    Dette kan være et mellombels problem, prøv om igjen senere.
+oauth.tryAccessButton=Prøv tilgang
+oauth.cancelButton=Avbryt
+save.editDescription=Skriv ei kort skildring av endringene dine. Den blir brukt til å gi andre kartleggere hint om hva du har gjort.
+styleSelector.editButton=Endre...
+backgroundSelector.dim=demp
+backgroundSelector.sharpen=gjør skarpere
+backgroundSelector.editButton=Endre...
+backgroundSelector.vectorButton=Vektorfil...
+options.tbcheck=Vis verktøy
+options.cursorcheck=Bruk skreddersydde pekere
+options.ok=Ok
diff --git a/l10n/locale/nl_NL/help_dialog.properties b/l10n/locale/nl_NL/help_dialog.properties
new file mode 100644 (file)
index 0000000..4ac19a4
--- /dev/null
@@ -0,0 +1,38 @@
+# Messages for Dutch (Nederlands)
+# Exported from translatewiki.net
+# Author: SPQRobin
+# Author: Siebrand
+
+help.gettingStarted=Aan de slag
+help.welcome=Welkom
+help.whyOpenstreetmap=<p><b>Waarom OpenStreetMap?</b> OSM is een kaartdienst op internet waarin gegevens voortdurend worden bijgewerkt en bewerkt door gewone mensen zoals u. Het voor de hand liggende voordeel is dat het gratis te gebruiken is, maar het is ook een belangrijke kaartenleverancier in crises geworden (OSM-gegevens zijn bijvoorbeeld gebruikt tijdens het coördineren van de hulpverlening na de aardbeving in Haïti). De nauwkeurigheid van deze gegevens is van cruciaal belang, en we hopen dat u uw tijd als vrijwilliger aan dit project besteedt!</p>
+help.activeMembers=<p><b>+ Als u een actief lid van OpenStreetMap bent</b>, meld u aan bij OSM voordat u bewerkt.</p>
+help.newMembers=<p><b>+ Voor nieuwe leden</b>: ga alstublieft naar <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> om een gebruiker aan te maken, meld u aan en kom dan terug om toegang te krijgen tot Potlatch 2 en te beginnen met bewerken.</p>
+help.introText=<p><b>Potlatch2</b> is een editor voor OpenStreetMap (OSM) waarmee u de website {0} rechtstreeks kunt bewerken.</p>
+help.introduction=Inleiding
+help.controls=Besturing
+help.interfaceControls=Besturingselementen van de interface
+help.mapBackground=<p>Kies uw kaartachtergrond uit één van de items in de lijst of voeg uw eigen vectorbestand toe.</p>
+help.colourStyle=<p>Kies de kaartstijl die u wilt gebruiken. Kleuren en algemene stijl variëren en omvatten ook andere opties zoals draadframe.</p>
+help.gps=GPS
+help.createOsmMap=<p>OSM-kaartgegevens maken met behulp van GPS-tracks van andere mensen als achtergrond</p>
+help.myGps=MyGPS
+help.displayGps=<p>GPS-traces weergeven die u eerder hebt geüpload naar OpenStreetMap.</p>
+help.undoRedo=Ongedaan maken/opnieuw uitvoeren
+help.madeMistake=<p>Een fout gemaakt? Klik gewoon op hit ongedaan maken of opnieuw uitvoeren om uw bewerkingen te corrigeren.</p>
+help.help=Hulp
+help.guideInfomation=<p>Hiermee geeft u deze handleiding weer in het geval u informatie nodig hebt als u begint met bewerken.</p>
+help.save=Opslaan
+help.addingFeatures=Functies toevoegen
+help.addingFeaturesText=<p><i>Voordat u begint, moet u weten hoe u moet omgaan met door eigendomsrechten beschermde gegevens. Gegevens gebruiken uit auteursrechtelijk beschermde kaarten of andere merkgebonden gegevens is ten strengste verboden! Kopiëren, overtrekken of elke reproductie van auteursrechtelijk beschermd werk is niet toegestaan! (Bron: <a href="http://wiki.openstreetmap.org/wiki/Copyright" target="_blank">Auteursrechten - OpenStreetMap Wiki</a>)</i></p>\n  <p></p>\n  <p>Lineaire dingen zoals straten, voetpaden, spoorwegen en contouren van gebouwen worden vanaf nu <b>wegen</b> genoemd.</p>\n  <p>Als u zich plotseling realiseert dat uw zijbalk met alle pictogrammen is verdwenen, komt dat doordat u een functie hebt geselecteerd op de kaart. Deselecteer gewoon door te klikken op een leeg gebied van de kaart om de pictogrammen opnieuw weer te geven.</p>\n    <p><b>Een punt (of knooppunt) maken</b>, doet u door gewoon het juiste pictogram uit de zijbalk naar de kaart te slepen en het daar neer te zetten. Zie "POI's toevoegen" voor meer informatie over het maken van een POI (Point of Interest).</p>\n    <p><b>Een weg maken</b> doet u door op de kaart op het startpunt te klikken, en daarna op volgende punten te klikken. Dubbelklik als de lijn klaar is op type "Enter".</p>\n    <p><b>Een veelhoek maken</b> kan door op het beginpunt te klikken punt en daarna op volgende punten te klikken (net zoals voor een weg). Eindig door te klikken op het beginpunt om de polygoon te voltooien.</p>\n  <p>Vergeet niet dat als u een fout maakt, kunt u altijd op de knop ongedaan maken kunt klikken. Door "Esc" in te toetsen worden al uw bewerkingen voor de huidige eigenschap ongedaan gemaakt.</p>
+help.editBeg=Bewerken (beginners)
+help.editingFeatures=Bewerkingsfuncties (voor beginners)
+help.editingFeaturesText=<p><b>Om een punt toe te voegen aan een bestaande weg</b> selecteert u de weg en voert shift+klik uit op de gewenste plaats.</p>\n    <p><b>Om een punt te verwijderen</b> selecteert u het punt en klikt op de knop "Item verwijderen" rechts onderaan of typt "Delete" of "Backspace" op uw toetsenbord.</p>\n  <p><b>Om een weg te verwijderen</b> selecteert u de weg en klikt op de knop "Weg verwijderen" rechts onderaan of u typt shift+Delete of shift+Backspace op uw toestenbord.</p>\n    <p><b>Om ene punt te verplaatsen</b> klikt u op een punt en sleept het naar de gewenste positie.</p>\n   <p><b>Om een weg te verplaatsen</b> klikt u op een weg en sleept deze in het geheel naar de gewenste positie. Hint: Selecteer een segment, zodat u niet per ongeluk een node verplaatst.</p>\n  <p><b>Om een weg langer te maken</b> klikt u op een van de uiteinden van de weg. Daarna kunt u tekenen zoals u gewend bent.</p>\n    <p><b>Om een nieuwe weg toe te voegen die voortkomt uit een bestaande weg</b>, shift+klikt u op een van de uiteinden van de weg.  Daarna kunt u tekenen zoals u gewend bent.</p>
+help.editAdv=Bewerken (gevorderd)
+help.editingFeaturesAdv=Bewerkingsfuncties (voor gevorderden)
+help.editingFeaturesAdvText=<p><b>Om een weg te splitsen</b> selecteert u het punt waar u wilt snijden en klikt op het hulpmiddel Schaar of typt "X" op uw toetsenbord. Hint: Voeg eerst een node toe om tussen twee bestaande nodes te kunnen knippen.</p>\n            <p><b>Om een kruising voor twee wegen te maken</b> tekent u zoals gebruikelijk, totdat u een de kruising moet maken. Als u dan uw muisaanwijzer over de andere weg beweegt, licht deze bluaw op. Klik op een van de blauwe punten of een wllikeurige gewenste plaats op de weg om een kruising te maken.</p>\n            <p><b>Om een kruising op te heffen</b> selecteert u het punt op de weg dat u wilt wijzigen. Typ dan "-" op uw toetsenbord om het punt te verwijderen.</p>\n            <p><b>Om de richting van een weg te wijzigen</b> klikt u op de knop "Richting wijzigen" in de rechter bovenhoek. De richting van een weg is alleen van belang voor eigenschappen met een label "één richting", zoals straten met eenrichtingsverkeer, kustlijnen, eilanden, enzovoort.</p>\n            <p><b>Om een parallelweg te maken</b> selecteert u een weg en klikt op de knop "Parallelweg" in de rechter onderhoek of u typt "P" op uw toetsenbord.</p>\n     <p><b>Om een weg te maken die nodes deelt met een bestaande weg</b> begint u te tekenen, klikt op de eerste twee gedeelde nodes, en typt dan "F" op uw toetsenbord om automatisch de bestaande weg te volgen.</p>\n            <p><i>Bekijk de <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer" target="_blank">Handleiding voor Potlatch 2</a> op de wiki van OpenStreetMap voor nog meer gevorderde bewerkingsmethoden en -afspraken.</i></p>
+help.tag=Label
+help.taggingFeatures=Labelfuncties
+help.taggingFeaturesText=<p>Met Potlatch 2 is het toevoegen van eigenschappen relatief eenvoudig geworden. Er is nu een grafisch menu beschikbaar en specifieke velden en iconen..</p>\n          <p><b>Een eigenschap toevoegen</b></p>\n          <p>Selecteer het punt of de weg die u wilt bewerken en kies het label uit het menu aan de linkerkant. Na het labelen van de eigenschap, verschijnen er een aantal basisvelden zoals Naam, Maximum snelheid en Breedte, afhankelijk van de eigenschap die u hebt toegevoegd. Vul de velden in voor zover mogelijk.</p><p>Gevorderde gebruikers merken wellicht de afwezigheid van een aantal labels en labelwaarden op die ze af en toe gebruiken. Als dit het geval is, klik dan op het tabblad "Gevorderd" onderin de zijbalk en bewerk of voeg toe waar nodig.</p>\n          <p>Op de wiki van OpenStreetMap staat ook een <a href="http://wiki.openstreetmap.org/wiki/Map_features" target="_blank">uitgebreide lijst met labels en labelwaarden</a>. Raadpleeg alstublieft de OSM-documentatie als u niet zeker weet hoe u iets moet labelen.</p>
+help.shortcuts=Snelkoppelingen
+help.keyboardShortcuts=Sneltoetsen
diff --git a/l10n/locale/nl_NL/p2_main.properties b/l10n/locale/nl_NL/p2_main.properties
new file mode 100644 (file)
index 0000000..ce4e723
--- /dev/null
@@ -0,0 +1,45 @@
+# Messages for Dutch (Nederlands)
+# Exported from translatewiki.net
+# Author: SPQRobin
+# Author: Siebrand
+
+main.undo=Ongedaan maken
+main.redo=Opnieuw uitvoeren
+main.background=Achtergrond
+main.map_style=Kaartstijl
+main.gpsButton=GPS-gegevens
+main.gps_data=GPS-gegevens
+main.my_tracks=Mijn tracks
+main.clear_gps=Wissen
+main.help=Hulp
+main.options=Instellingen
+main.save=Opslaan
+tag_viewer.dndprompt=Nieuwe punten toevoegen door ze op de kaart te slepen
+toolbox.delete_node=Node verwijderen (Delete)
+toolbox.delete_area=Gebied verwijderen (Shift+Delete)
+toolbox.delete_way=Weg verwijderen (Shift+Delete)
+toolbox.delete_item=Item verwijderen
+toolbox.reverse_direction=Richting omkeren (V)
+toolbox.split_way=Weg splitsen (X)
+toolbox.merge_ways=Wegen samenvoegen
+toolbox.straighten_way=Weg recht maken
+toolbox.make_circular=Circulair maken
+toolbox.make_right_angled=Rechthoekig maken (Q)
+toolbox.create_parrallel_way=Parallelle weg maken (P)
+oauth.gotLinkBox=Klik op de onderstaande verwijzing om een webpagina te openen waar u gevraagd wordt om toegang tot deze app te krijgen.
+oauth.authorized=Als u toegang hebt, klik dan op de knop "Toegang krijgen" hieronder
+oauth.deniedLabel=<b>U hebt geen toegang. Controleer uw gegevens en probeer het opnieuw</b>
+oauth.rememberMe=Aanmeldgegevens onthouden
+oauth.permFail=<p>De server heeft de toegang geweigerd. Het was niet mogelijk om een autorisatieverwijzing te verkrijgen.</p>\n<p><b>OAuth-toegang is niet mogelijk.</b></p>\n<p>Neem contact op met de leverancier van de toepassing om te achterhalen wat er aan de hand is.</p>
+oauth.tempFail=Er was een probleem bij het contacteren van de server om toegang te krijgen.  Dit kan een tijdelijke fout zijn, probeer het later opnieuw.
+oauth.tryAccessButton=Toegang proberen te verkrijgen
+oauth.cancelButton=Annuleren
+save.editDescription=Geef een beschrijving van uw bewerking op. Dit is nodig om andere mappers een idee te geven welke wijzigingen u aangebracht hebt.
+styleSelector.editButton=Bewerken...
+backgroundSelector.dim=vervagen
+backgroundSelector.sharpen=verscherpen
+backgroundSelector.editButton=Bewerken...
+backgroundSelector.vectorButton=Vectorbestand...
+options.tbcheck=Hulpmiddelen weergeven
+options.cursorcheck=Aangepaste cursors gebruiken
+options.ok=OK
diff --git a/l10n/locale/nn_NO/help_dialog.properties b/l10n/locale/nn_NO/help_dialog.properties
new file mode 100644 (file)
index 0000000..1c2c442
--- /dev/null
@@ -0,0 +1,5 @@
+# Messages for Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+# Exported from translatewiki.net
+
+help.gettingStarted=Kom i gang
+help.welcome=Velkommen
diff --git a/l10n/locale/nn_NO/p2_main.properties b/l10n/locale/nn_NO/p2_main.properties
new file mode 100644 (file)
index 0000000..2c39b39
--- /dev/null
@@ -0,0 +1,45 @@
+# Messages for Norwegian Nynorsk (‪Norsk (nynorsk)‬)
+# Exported from translatewiki.net
+# Author: Dittaeva
+# Author: Gnonthgol
+
+main.undo=Angre
+main.redo=Gjer om
+main.background=Bakgrunn
+main.map_style=Kartstil
+main.gpsButton=GPS-data
+main.gps_data=GPS-data
+main.my_tracks=Mine spor
+main.clear_gps=Tøm
+main.help=Hjelp
+main.options=Innstillingar
+main.save=Lagra
+tag_viewer.dndprompt=Legg til nye punkt ved å dra dei over på kartet
+toolbox.delete_node=Slett node (Delete)
+toolbox.delete_area=Slett område (Shift+Delete)
+toolbox.delete_way=Slett veg (Shift+Delete)
+toolbox.delete_item=Slett element
+toolbox.reverse_direction=Snu retning (V)
+toolbox.split_way=Del veg (X)
+toolbox.merge_ways=Slå saman vegar
+toolbox.straighten_way=Rett opp veg
+toolbox.make_circular=Gjer sirkulær
+toolbox.make_right_angled=Gjer rettvinkla (Q)
+toolbox.create_parrallel_way=Lag parallell veg (P)
+oauth.gotLinkBox=Trykk på lenkja under for å opne ei nettside der du blir beden om å godkjenne tilgang for dette programmet.
+oauth.authorized=Trykk på «Prøv tilgang»-knappen under, etter at du har godkjent tilgangen.
+oauth.deniedLabel=<b>Tilgang vart ikkje gjeven, undersøk brukaropplysningar og prøv om att.</b>
+oauth.rememberMe=Hugs meg
+oauth.permFail=<p>Tenaren nekta tilgang til dette programmet -- godkjenningslenkje kunne ikkje skaffast.             </p><p>         <b>OAuth-tilgang vil ikkje vere mogleg.</b>        </p><p> Ta kontakt med leverandøren for å finne ut kva som er problemet.</p>
+oauth.tempFail=Det var problem med å få kontakt med tenaren for å få godkjenning.    Dette kan vere eit mellombels problem, prøv om att seinare.
+oauth.tryAccessButton=Prøv tilgang
+oauth.cancelButton=Avbryt
+save.editDescription=Skriv ei kort skildring av endringane dine. Den blir brukt til å gje andre kartleggjarar hint om kva du har gjort.
+styleSelector.editButton=Endre...
+backgroundSelector.dim=demp
+backgroundSelector.sharpen=gjer skarpare
+backgroundSelector.editButton=Endre...
+backgroundSelector.vectorButton=Vektorfil...
+options.tbcheck=Vis verkty
+options.cursorcheck=Bruk skreddarsydde peikarar
+options.ok=Ok
diff --git a/l10n/locale/no_NO b/l10n/locale/no_NO
new file mode 120000 (symlink)
index 0000000..59ea540
--- /dev/null
@@ -0,0 +1 @@
+nb_NO
\ No newline at end of file
index c0c0ebd0459a4fbc9d712590cfa3efb99fd3a1e0..e872fbb4932c74959af5c07d08579a32b076e363 100644 (file)
@@ -1,4 +1,19 @@
-# pl_PL resources file
+# Messages for Polish (Polski)
+# Exported from translatewiki.net
+# Author: BeginaFelicysym
 
-help.gettingStarted = Pierwsze kroki
-help.welcome = Witaj
+help.gettingStarted=Pierwsze kroki
+help.welcome=Witaj
+help.gps=GPS
+help.createOsmMap=<p>Utwórz dane mapy OSM przy użyciu śladów GPS innych osób jako podstawie</p>
+help.myGps=MyGPS
+help.displayGps=<p>Wyświetl ślady GPS, które wcześniej już załadowano do OpenStreetMap.</p>
+help.help=Pomoc
+help.save=Zapisz
+help.editBeg=Edycja (Pocz.)
+help.editingFeatures=Funkcje edycji (początkujący)
+help.editAdv=Edycja (zaaw.)
+help.editingFeaturesAdv=Funkcje edycji (zaawansowane)
+help.tag=Znacznik
+help.shortcuts=Skróty
+help.keyboardShortcuts=Skróty klawiaturowe
index f113bf72b66ff18c7739092b2859f4c624b58b24..0e0f4d634b444b1d2ce2f35f54e005432b8b9269 100644 (file)
@@ -1,26 +1,27 @@
-# pl_PL resources file
+# Messages for Polish (Polski)
+# Exported from translatewiki.net
+# Author: BeginaFelicysym
 
-main.undo = Cofnij
-main.redo = Ponów
-main.background = Tło
-main.map_style = Styl mapy
-main.gps_data = Dane GPS
-main.my_tracks = Moje ślady
-main.clear_gps = Clear
-main.help = Pomoc
-main.options = Opcje
-main.save = Zapisz
-
-tag_viewer.dndprompt = Dodaj nowy punkt poprzez przeniesienie go na mapę
-
-toolbox.delete_node = Usuń węzeł (Delete)
-toolbox.delete_area = Usuń obszar (Shift+Delete)
-toolbox.delete_way = Usuń drogę (Shift+Delete)
-toolbox.delete_item = Usuń obiekt
-toolbox.reverse_direction = Odwróć kierunek (V)
-toolbox.split_way = Przetnij drogę (X)
-toolbox.merge_ways = Połącz drogi
-toolbox.straighten_way = Prosta droga
-toolbox.make_circular = Utwórz okrąg
-toolbox.make_right_angled = Utwórz kąty proste (Q)
-toolbox.create_parrallel_way = Stwórz drogę równoległą (P)
+main.undo=Cofnij
+main.redo=Ponów
+main.background=Tło
+main.map_style=Styl mapy
+main.gpsButton=Dane GPS
+main.gps_data=Dane GPS
+main.my_tracks=Moje ślady
+main.clear_gps=Clear
+main.help=Pomoc
+main.options=Opcje
+main.save=Zapisz
+tag_viewer.dndprompt=Dodaj nowy punkt poprzez przeniesienie go na mapę
+toolbox.delete_node=Usuń węzeł (Delete)
+toolbox.delete_area=Usuń obszar (Shift+Delete)
+toolbox.delete_way=Usuń drogę (Shift+Delete)
+toolbox.delete_item=Usuń obiekt
+toolbox.reverse_direction=Odwróć kierunek (V)
+toolbox.split_way=Przetnij drogę (X)
+toolbox.merge_ways=Połącz drogi
+toolbox.straighten_way=Prosta droga
+toolbox.make_circular=Utwórz okrąg
+toolbox.make_right_angled=Utwórz kąty proste (Q)
+toolbox.create_parrallel_way=Stwórz drogę równoległą (P)
diff --git a/l10n/locale/ru/help_dialog.properties b/l10n/locale/ru/help_dialog.properties
new file mode 100644 (file)
index 0000000..3f776a6
--- /dev/null
@@ -0,0 +1,38 @@
+# Messages for Russian (Русский)
+# Exported from translatewiki.net
+# Author: Express2000
+# Author: TarzanASG
+
+help.gettingStarted=Начало работы
+help.welcome=Добро пожаловать
+help.whyOpenstreetmap=<p><b>Почему OpenStreetMap?</b> OSM - сервис картографии, в котором все данные постоянно обновляются и редактируются такими же людьми как и вы. Очевидным преимуществом является бесплатное использование сервиса, при этом он стал основным инструментом кризисного картографирования (например, использование данных OSM для координации усилий по оказанию помощи при землетрясении в Гаити). Точность этих данных имеет решающее значение, и мы надеемся, что вы сможете добровольно потратить немного своего времени!</p>
+help.activeMembers=<p><b>+ Для активных участников OpenStreetMap</b>, войдите в OSM перед редактированием.</p>
+help.newMembers=<p><b>+ Для новых участников</b>, пожалуйста посетите <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> для создания учетной записи, войдите в систему, а затем вернитесь для получения доступа к редактору Potlatch 2 для начала редактирования.</p>
+help.introText=<p><b>Potlatch 2</b> — редактор OpenStreetMap (OSM), позволяющий вносить изменения непосредственно через веб-сайт {0}.</p>
+help.introduction=Введение
+help.controls=Элементы управления
+help.interfaceControls=Элементы интерфейса
+help.mapBackground=<p>Выберите фоновый рисунок карты, выбрав один из элементов в списке или добавьте свой собственный векторный файл.</p>
+help.colourStyle=<p>Выберите стиль, в котором вы хотите просматривать карту. Цвета и общий стиль могут быть изменены и включают также другие варианты как, например, каркас.</p>
+help.gps=GPS
+help.createOsmMap=<p>Создание данных OSM карты, используя GPS-треки других людей в качестве подложки</p>
+help.myGps=МойGPS
+help.displayGps=<p>Отображение GPS-треков, загруженных вами на OpenStreetMap ранее.</p>
+help.undoRedo=Отменить / повторить
+help.madeMistake=<p>Сделали ошибку? Просто нажмите отменить и/или повторить для исправления изменений.</p>
+help.help=Помощь
+help.guideInfomation=<p>Открывает данное руководство в случае, если вам понадобится информация во время редактирования.</p>
+help.save=Сохранить
+help.addingFeatures=Добавление функций
+help.addingFeaturesText=<p><i>Прежде чем начать, первое правило, которое вы должны знать - это использование проприетарных (собственнических) данных. Данные с защищенных авторским правом карт или любых других собственнических источников строго запрещены! Не допускается копирование, трассировка или любое воспроизведение авторских работ! (Источник: <a href="http://wiki.openstreetmap.org/wiki/RU:%D0%90%D0%B2%D1%82%D0%BE%D1%80%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D1%80%D0%B0%D0%B2%D0%B0?uselang=ru" target="_blank">авторское право - OpenStreetMap Вики</a>)</i></p>\n<p>\n<p>Линейные объекты вроде улиц, пешеходных дорожек, железных дорог и строительных контуров здесь и далее будут называться <b>линиями</b>.</p>\n<p>Если вы вдруг заметили, что боковая панель с ее значками пропали, то это произошло потому, что Вы выбрали на карте какой-то объект. Просто отмените выбор, щелкнув пустую область для восстановления значков.</p>\n<p><b>Для создания точки (или узла)</b>, просто перетащите соответствующий значок с боковой панели на карту. Посмотрите раздел добавление объектов, чтобы узнать больше о создании POI (Point of Interest - точек интереса)</p>\n<p><b>Для создания линии</b>, начните его щёлкнув по карте в точке её начала, а затем щелкайте на каждой его последующей точке. Дважды щелкните, чтобы закончить линию или нажмите клавишу Enter.</p>\n<p><b>Для создания полигона</b>, начните его, нажав на карте на его начальной точке, а затем щелкайте на каждой его вершине. Чтобы закончить полигон, щелкните на его первой вершине.</p>\n<p>Помните, если вы совершили ошибку, вы всегда можете нажать кнопку Отменить. Нажатие клавиши Esc отменяет все изменения для текущей функции.</p>
+help.editBeg=Редактирование (Нач.)
+help.editingFeatures=Редактирование (начинающим)
+help.editingFeaturesText=<p><b>Чтобы добавить точку на существующую линию</b>, выберите данную линию и, удерживая Shift, щёлкните в нужном месте.</p>\n<p><b>Чтобы удалить точку</b>, выберите точку и нажмите кнопку «Удалить элемент» в правом нижнем углу или нажмите на клавиатуре клавишу Delete (или Backspace).</p>\n<p><b>Чтобы удалить путь</b>, выберите путь и в правом нижнем углу нажмите кнопку Удалить элемент или нажмите Shift + Delete (или Shift + Backspace) на вашей клавиатуре.</p>\n<p><b>Чтобы переместить точку</b>, щелкните по ней и перетащите точку.</p>\n<p><b>Чтобы переместить линию</b>, щелкните по ней и перетащите её (Подсказка: захватите сегмент, где Вы не заденете случайно точку).</p>\n<p><b>Для расширения линии</b>, нажмите на одну из конечных точек пути. Затем можно продолжить рисование как обычно.</p>\n<p><b>Добавить новую линию расширяющийся от существующего</b>, щёлкните на одной из конечных точек пути удерживая Shift. Затем можно продолжить рисование как обычно.</p>
+help.editAdv=Редактирование (Опытным)
+help.editingFeaturesAdv=Редактирование (Опытным пользователям)
+help.editingFeaturesAdvText=<p><b>Для разделения линии</b>, выберите точку, в которой вы хотите разделить и щёлкните на инструмент Ножницы или нажмите X на вашей клавиатуре. (Подсказка: Добавьте сначала точку, чтобы разделить между точками.)</p>\n            <p><b>Чтобы соединить две линии</b>, рисуйте как обычно до тех пор, пока вам не понадобиться сделать соединение. Затем как только вы наведёте вашу мышь над другой линией, точки подсветятся голубым. Кликните на одной из голубых точек или другом желаемом месте на линии для создания соединения.</p>\n            <p><b>Чтобы разъединить соединение</b>, выберите точку на линии, которую вы хотите изменить. Нажмите "-" на вашей клавиатуре для удаления точки.</p>\n            <p><b>Для изменения направления линии</b>, кликните на кнопку Изменить направление в нижнем правом углу. Направление линии касается только для тех элементов, которые имеют тег "oneway" - односторонние улицы, береговые линии, острова и так далее.</p>\n            <p><b>Чтобы создать параллельную линию</b>, выберите линию и нажмите кнопку "Создать параллельную линию" в нижнем правом углу или нажмите P на вашей клавиатуре.</p>\n     <p><b>Для создания линии, которая имеет общие точки с существующей линией</b>, начните рисовать, нажмите на две первые общие точки, затем нажмите F для автоматического следования существующей линии.</p>\n            <p><i>Посетите <a href="http://wiki.openstreetmap.org/wiki/RU:%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D1%8B_Potlatch_2?uselang=ru" target="_blank">букварь по Potlatch 2</a> в вики OpenStreetMap для более расширенных методов редактирования и условных соглашений.</i></p>
+help.tag=Тег
+help.taggingFeatures=Функции теггирования
+help.taggingFeaturesText=<p>С Potlatch 2 создание меток стало достаточно простым при использовании графических меню и специальных полей/значков.</p>\n          <p><b>Создание меток для объекта</b></p>\n          <p>Выберите точку или путь для редактирования и выберите подходящую метку с левой боковой панели. После создания метки объекта будут доступны основные поля (Имя, ограничение скорости и ширина, в зависимости от метки, которую Вы присваиваете). Заполните как можно более подробно.</p><p>Продвинутые пользователи могут заметить отсутствие некоторых меток и их значений. В этом случае нажмите вкладку Подробно внизу боковой панели и отредактируйте или добавьте что считаете нужным.</p>\n          <p>В OpenStreetMap вики также можно найти <a href="wiki.openstreetmap.org/wiki/RU:Map_Features?uselang=ru" target="_blank">расширенный список меток и их значений</a>. Пожалуйста, обратитесь к документации OSM, если Вы не уверены какую метку стоит использовать.</p>
+help.shortcuts=Сочетания клавиш
+help.keyboardShortcuts=Клавиатурные сочетания клавиш
diff --git a/l10n/locale/ru/p2_main.properties b/l10n/locale/ru/p2_main.properties
new file mode 100644 (file)
index 0000000..506cff9
--- /dev/null
@@ -0,0 +1,47 @@
+# Messages for Russian (Русский)
+# Exported from translatewiki.net
+# Author: Cekli829
+# Author: Express2000
+# Author: TarzanASG
+# Author: Александр Сигачёв
+
+main.undo=Отменить
+main.redo=Повторить
+main.background=Подложка
+main.map_style=Стиль карты
+main.gpsButton=Данные GPS
+main.gps_data=Данные GPS
+main.my_tracks=Мои треки
+main.clear_gps=Очистить
+main.help=Помощь
+main.options=Настройки
+main.save=Сохранить
+tag_viewer.dndprompt=Добавьте новые точки, переместив их на карту
+toolbox.delete_node=Удалить точку (Delete)
+toolbox.delete_area=Удалить область (Shift + Delete)
+toolbox.delete_way=Удалить линию (Shift + Delete)
+toolbox.delete_item=Удалить элемент
+toolbox.reverse_direction=Обратить направление (V)
+toolbox.split_way=Разделить линию (X)
+toolbox.merge_ways=Объединить пути
+toolbox.straighten_way=Выпрямить путь
+toolbox.make_circular=Создать круговое движение
+toolbox.make_right_angled=Сделать прямой угол (Q)
+toolbox.create_parrallel_way=Создать параллельную линию (P)
+oauth.gotLinkBox=Нажмите на ссылку ниже, чтобы открыть веб-страницу, где вам будет предложено авторизовать доступ к этому приложению.
+oauth.authorized=Авторизовав доступ, нажмите внизу на кнопку «Испытать доступ»
+oauth.deniedLabel=<b>В доступе отказано, проверьте и повторите попытку</b>
+oauth.rememberMe=Запомнить меня
+oauth.permFail=<p>Сервер отклонил полномочия этого приложения: не удалось получить ссылку авторизации.</p>\n<p>             <b>OAuth доступ невозможен.</b>         </p>\n<p>Пожалуйста, свяжитесь с поставщиком приложения, чтобы выяснить подробности.</p>
+oauth.tempFail=Проблема подключения к серверу для получения авторизации.    Это может быть временной ошибкой, повторите попытку позже.
+oauth.tryAccessButton=Испытать доступ
+oauth.cancelButton=Отмена
+save.editDescription=Введите описание изменений. Это даст представление другим редакторам о сделанных вами изменениях.
+styleSelector.editButton=Изменить...
+backgroundSelector.dim=размыть
+backgroundSelector.sharpen=резкость
+backgroundSelector.editButton=Изменить...
+backgroundSelector.vectorButton=Векторный файл...
+options.tbcheck=Показать панель инструментов
+options.cursorcheck=Использовать свои курсоры
+options.ok=OK
diff --git a/l10n/locale/sq/help_dialog.properties b/l10n/locale/sq/help_dialog.properties
new file mode 100644 (file)
index 0000000..41c6b5b
--- /dev/null
@@ -0,0 +1,23 @@
+# Messages for Albanian (Shqip)
+# Exported from translatewiki.net
+# Author: Euriditi
+
+help.gettingStarted=Duke filluar
+help.welcome=Mirësevini
+help.whyOpenstreetmap=<p><b>Përse OpenStreetMap?</b> OSM është një shërbim harografik në të cilin të dhënat freskohen në mënyrë konstante çdo ditë nga njerëz si ju. Përfitimi i dukshëm është se gjithçka është falas dhe gjithashtu dhe ne kemi luajtur rol të veçantë në koordifikimin e fatkeqsive natyrore (p.sh. përdorimi i të dhënave nga OSM për të koordinuar përpjekjet e ndihmave gjatë tërmetit në Haiti). Saktësia e të dhënave nuk është e sigurtë dhe shpresojmë se ju do të na kushtoni vullnetarisht pak nga koha juaj!</p>
+help.activeMembers=<p><b>+ Anëtarët aktivë të OpenStreetMap</b>, janë të lutur të kyçen në OSM përpara se të redaktojnë.</p>
+help.newMembers=<p><b>+ Anëtarët e rinj</b>, për të krijuar një llogari janë të lutur të vizitojnë <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a>, më pas kyçuni në llogari, dhe pastaj rikthehuni këtu për të lejuar aksesin e Potlatch 2 në mënyrë që të redaktoni.</p>
+help.introText=<p><b>Potlatch 2</b> është një redaktor i OpenStreetMap (OSM) që ju lejon ju të bëni ndryshime direkte përmes uebsite-it {0}.</p>
+help.controls=Kontrolli
+help.interfaceControls=Ndërfaqja e kontrollit
+help.mapBackground=<p>Zgjidhni një nga artikujt e listuar më poshtë si sfond për hartën ose shto skedën tënde vektoriale.</p>
+help.colourStyle=<p>Zgjidhni stilin në të cilin dëshironi të shikoni hartën. Ngjyrat dhe stili variojnë dhe gjithashtu përfshijnë opsione shtesë si p.sh. korniza.</p>
+help.gps=GPS
+help.createOsmMap=<p>Krijo hartë OSM duke përdorur si sfond gjurmë GPS nga përdorues të tjerë</p>
+help.myGps=MyGPS
+help.displayGps=<p>Shfaq gjurmët GPS që ju i keni ngarkuar më parë në OpenStreetMap.</p>
+help.undoRedo=Zhbëje / Ribëje
+help.madeMistake=<p>Keni bërë ndonjë gabim? Thjesht shtypni zhbëje dhe/ose ribëje për të korrektuar redaktimin tuaj.</p>
+help.help=Ndihmë
+help.guideInfomation=<p>Shfaq këtë guidë në rast se keni nevojë për informacion gjatë redaktimit.</p>
+help.save=Ruaje
diff --git a/l10n/locale/tr/p2_main.properties b/l10n/locale/tr/p2_main.properties
new file mode 100644 (file)
index 0000000..c2d5119
--- /dev/null
@@ -0,0 +1,40 @@
+# Messages for Turkish (Türkçe)
+# Exported from translatewiki.net
+# Author: Emperyan
+# Author: Katpatuka
+
+main.undo=Geri al
+main.redo=Yinele
+main.background=Arka plan
+main.map_style=Harita Biçimi
+main.gpsButton=GPS Verisi
+main.gps_data=GPS Verisi
+main.my_tracks=GPS İzlerim
+main.clear_gps=Temizle
+main.help=Yardım
+main.options=Seçenekler
+main.save=Kaydet
+tag_viewer.dndprompt=Yeni noktaları sürükleyerek haritaya ekle
+toolbox.delete_node=Noktayı sil (Del)
+toolbox.delete_area=Alanı sil (Shift + Del)
+toolbox.delete_way=Yolu sil (Shift + Del)
+toolbox.delete_item=Öğeyi sil
+toolbox.reverse_direction=Yönünü tersine döndür (V)
+toolbox.split_way=Yolunu böl (X)
+toolbox.merge_ways=Yolları birleştir
+toolbox.straighten_way=Yolu hizala
+toolbox.make_circular=Dairesel yap
+toolbox.make_right_angled=Dik açılı yap (Q)
+toolbox.create_parrallel_way=Paralel yolu oluştur (P)
+oauth.rememberMe=Beni hatırla
+oauth.tryAccessButton=Erişim dene
+oauth.cancelButton=Vazgeç
+save.editDescription=Lütfen düzenlemelerinin açıklamasını yaz. Diğer haritacıları ne gibi değişiklikler yaptığını fikir verebilir.
+styleSelector.editButton=Düzenle...
+backgroundSelector.dim=söndür
+backgroundSelector.sharpen=keskinleştir
+backgroundSelector.editButton=Düzenle...
+backgroundSelector.vectorButton=Vektör dosyası...
+options.tbcheck=Araç kutusunu görüntüle
+options.cursorcheck=Özel imleçler kullan
+options.ok=Tamam
diff --git a/l10n/locale/vi/help_dialog.properties b/l10n/locale/vi/help_dialog.properties
new file mode 100644 (file)
index 0000000..9fd363c
--- /dev/null
@@ -0,0 +1,37 @@
+# Messages for Vietnamese (Tiếng Việt)
+# Exported from translatewiki.net
+# Author: Minh Nguyen
+
+help.gettingStarted=Bắt đầu
+help.welcome=Hoan nghênh
+help.whyOpenstreetmap=<p><b>Tại sao OpenStreetMap?</b> OSM là một dịch vụ bản đồ có dữ liệu được cập nhật luôn luôn do công sức của những nguời thường như bạn. Dĩ nhiên bạn có thể sử dụng OSM miễn phí, nhưng nó cũng có điểm lợi khác. Nó là một trong những dịch vụ quan trọng nhất cung cấp bản đồ ở nơi thảm họa: dữ liệu OSM được sử dụng để phối hợp các nỗ lực cứu tế tại Haiti sau động đất. Dữ liệu bản đồ cần phải chính xác và đầy đủ. Hy vọng bạn sẽ tình nguyện để dành một tí thì giờ để đóng góp!</p>
+help.activeMembers=<p><b>• Các thành viên đã có tài khoản:</b> Xin vui lòng đăng nhập vào OpenStreetMap truớc khi sửa đổi.</p>
+help.newMembers=<p><b>• Các thành viên mới:</b> Xin vui lòng ghé vào <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> để mở tài khoản mới truớc tiên. Sau đó, đăng nhập và trở về đây để cho phép Potlatch 2 truy cập tài khoản và bắt đầu sửa đổi.</p>
+help.introText=<p><b>Potlatch2</b> là một trình vẽ OpenStreetMap (OSM) cho phép bạn sửa đổi trực tiếp từ trang {0}.</p>
+help.introduction=Giới thiệu
+help.controls=Điều khiển
+help.interfaceControls=Các điều khiển giao diện
+help.mapBackground=<p>Chọn lớp nền bản đồ từ trình đơn hoặc thêm một tập tin vectơ của bạn.</p>
+help.colourStyle=<p>Chọn kiểu để hiển thị bản đồ. Có sẵn nhiều kiểu màu sắc và kiểu vẽ đường, cũng như một số tùy chọn khác như Khung lưới.</p>
+help.gps=GPS
+help.createOsmMap=<p>Vẽ dữ liệu bản đồ OSM bằng cách đồ lên tuyến đường GPS của nguời khác.</p>
+help.myGps=MyGPS
+help.displayGps=<p>Hiện các tuyến đường GPS mà bạn đã tải lên OpenStreetMap.</p>
+help.undoRedo=Hoàn tác / Làm lại
+help.madeMistake=<p>Vừa vẽ nhầm lẫn? Chỉ việc bấm Hoàn tác hoặc Làm lại để chỉnh sửa các đối tượng vẽ.</p>
+help.help=Trợ giúp
+help.guideInfomation=<p>Mở hướng dẫn này để chỉ dẫn cách sửa đổi.</p>
+help.save=Lưu
+help.addingFeatures=Bổ sung Đối tượng
+help.addingFeaturesText=<p><i>Truớc tiên, bạn phải nhớ quy tắc quan trọng nhất về cách sử dụng dữ liệu mang tính thương mại: <b>không cho phép</b> sử dụng dữ liệu từ bất kỳ bản đồ có bản quyền hoặc bất kỳ dữ liệu thương mại khác! <b>Không cho phép</b> sao chép, đồ lên, hoặc tái sản xuất bằng bất cứ phương pháp nào! (Nguồn: <a href="http://wiki.openstreetmap.org/wiki/Copyright?uselang=vi" target="_blank">Quyền tác giả – OpenStreetMap Wiki</a>)</i></p>\n<p></p>\n<p>Hướng dẫn này chỉ đến các đối tượng hình tuyến như đường sá, đường bộ, đường sắt, và hình dạng tòa nhà với tên <b>lối</b>.</p>\n<p>Nếu bạn tình cờ nhận thấy rằng các hình tượng trên thanh bên bị mất, có lẽ một địa điểm hay lối đang được chọn trên bản đồ. Để bỏ chọn nó, nhấn chuột vào một vùng trống trên bản đồ; các hình tượng sẽ hiện ngay.</p>\n<p>Để <b>bổ sung một địa điểm (hoặc nốt)</b>, chỉ việc kéo một hình tượng trưng cho nó từ thanh bên và thả nó vào bản đồ. Xem “Bổ sung địa điểm” để biết thêm về việc tạo địa điểm ưa thích (POI)</p>\n<p>Để <b>vẽ một lối</b>, nhấn chuột vào bản đồ tại vị trí bắt đầu, rồi nhấn chuột vào mọi vị trí dẫn tiếp. Nhấn đúp hoặc bấm “Enter” trên bàn phím để kết thúc đường vẽ.</p>\n<p>Để <b>vẽ một hình đa giác (vùng)</b>, nhấn chuột vào bản đồ tại vị trí bắt đầu, rồi nhấn chuột vào mọi vị trí dẫn tiếp – y chang như việc vẽ lối – và nhấn chuột vào nốt đầu tiên để đóng hình đa giác.</p>\n<p>Nếu bạn vẽ nhầm lẫn, bạn có thể bấm nút Hoàn tác. Bấm “Esc” trên bàn phím để kết thúc sửa đổi điểm hay lối hiện hành.</p>
+help.editBeg=Sửa (Cơ bản)
+help.editingFeatures=Sửa đổi Đối tượng (Cơ bản)
+help.editingFeaturesText=<p>Để <b>thêm một nốt vào giữa một lối đã tồn tại</b>, chọn lối đó, rồi giữ bấm Shift và nhấn chuột vào vị trí của nốt mới.</p>\n<p>Để <b>xóa một nốt</b>, chọn nó và bấm nút “Xóa Nốt” ở phía duới bên phải hoặc bấm Delete (hoặc Backspace) trên bàn phím.</p>\n<p>Để <b>xóa cả một lối</b>, chọn lối đó và bấm nút “Xóa Lối” ở phía dưới bên phải, hoặc bấm Shift+Delete (hoặc Shift+Backspace) trên bàn phím.</p>\n<p>Để <b>di chuyển một điểm hay nốt</b>, chọn và kéo nó.</p>\n<p>Để <b>di chuyển một lối</b>, bấm và kéo cả lối đó. (Gợi ý: Khi kéo lối, tránh các nốt của lối).</p>\n<p>Để <b>kéo dài một lối</b>, nhấn chuột vào nốt tại đầu hay đuôi của lối, rồi tiếp tục vẽ lối bình thường.</p>\n<p>Để <b>vẽ một lối mới liền với đầu hay đuôi của lối đã tồn tại</b>, giữ Shift và nhấn chuột vào nốt tại đầu hay đuôi của lối đó, rồi tiếp tục vẽ lối mới bình thường.</p>
+help.editAdv=Sửa (Nâng cao)
+help.editingFeaturesAdv=Sửa đổi Đối tượng (Nâng cao)
+help.editingFeaturesAdvText=<p>Để <b>cắt đôi một lối</b>, chọn một điểm để cắt và nhấn chuột vào công cụ “Cắt đôi” (đôi kéo) hoặc bấm “X” trên bàn phím. (Gợi ý: Để cắt một lối giữa hai nốt, thêm một nốt mới trước tiên.)</p>\n<p>Để <b>nối liền hai lối</b>, vẽ các lối bình thường đến khi cần nối liền. Khi bạn chuyển con trỏ lên trên một lối khác, các nốt của lối đó sẽ được tô màu xanh. Nhấn chuột vào một trong những nốt xanh hoặc vào nơi khác nào đó trên lối để nối liền.</p>\n<p>Để <b>gỡ một lối khỏi nơi nối liền</b>, chọn nốt trên lối mà bạn muốn gỡ ra. Bấm “-” trên bàn phím để dời nốt khỏi lối.</p>\n<p>Để <b>đảo nguợc một lối</b>, bấm nút “Đảo nguợc” ở phía duới bên phải. Hướng của lối chỉ có ảnh hưởng đến các lối có thẻ “oneway” (một chiều) như các đường một chiều, cũng như các bờ biển, hòn đảo, v.v.</p>\n<p>Để <b>vẽ các lối song song</b>, chọn lối gốc và bấm nút “Vẽ Lối Song song” ở phía duới bên phải, hoặc bấm “P” trên bàn phím.</p>\n<p>Để <b>vẽ lối mới chạy theo lối khác</b>, bắt đầu vẽ lối mới, nhấn chuột vào ít nhất hai nốt trên lối khác, rồi cứ bấm “F” trên bàn phím để tự động chạy theo lối khác.</p>\n<p><i>Đọc <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer?uselang=vi" target="_blank">Hướng dẫn Potlatch2</a> trên OpenStreetMap Wiki để biết những cách sửa đổi nâng cao hơn.</i></p>
+help.tag=Thẻ
+help.taggingFeatures=Gắn thẻ vào Đối tượng
+help.taggingFeaturesText=<p>Trong Potlatch 2, bạn có thể sử dụng các trình đơn, hộp văn bản, và hình tượng để gắn thẻ dễ dàng.</p>\n<p><b>Gắn thẻ vào một địa điểm, nốt, hay lối</b></p>\n<p>Chọn nốt hay điểm để sửa đổi và chọn thẻ phù hợp từ thanh bên ở bên trái. Sau khi gắn thẻ vào đối tượng, bạn có thể tùy biến một số chi tiết cơ bản, thí dụ như “Tên”, “Tốc độ Tối đa”, và “Chiều rộng”, tùy thẻ được chọn. Điền biểu mẫu này càng đầy đủ càng tốt.</p>\n<p>Những người dùng nâng cao có thể cần đặt một số thẻ và chi tiết ít phổ biến hơn. Trong trường hợp này, bấm thẻ “Nâng cao” ở phía duới của thanh bên và sửa đổi và bổ sung các thẻ khác.</p>\n<p>OpenStreetMap Wiki cung cấp một <a href="http://wiki.openstreetmap.org/wiki/Vi:Map_Features?uselang=vi" target="_blank">danh sách thẻ và giá trị thẻ đầy đủ</a>. Xin vui lòng tra cứu tài liệu OSM này khi nào không chắc chắn về các thẻ để sử dụng.</p>
+help.shortcuts=Phím tắt
+help.keyboardShortcuts=Phím tắt
diff --git a/l10n/locale/vi/p2_main.properties b/l10n/locale/vi/p2_main.properties
new file mode 100644 (file)
index 0000000..8f15315
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Vietnamese (Tiếng Việt)
+# Exported from translatewiki.net
+# Author: Minh Nguyen
+
+main.undo=Hoàn tác
+main.redo=Làm lại
+main.background=Lớp Nền
+main.map_style=Kiểu Bản đồ
+main.gpsButton=Dữ liệu GPS
+main.gps_data=Dữ liệu GPS
+main.my_tracks=Tuyến dường của Tôi
+main.clear_gps=Xóa
+main.help=Trợ giúp
+main.options=Tùy chọn
+main.save=Lưu
+tag_viewer.dndprompt=Để thêm dịa điểm mới, kéo nó vào bản đồ
+toolbox.delete_node=Xóa Nốt (Delete)
+toolbox.delete_area=Xóa Vùng (Shift+Delete)
+toolbox.delete_way=Xóa Lối (Shift+Delete)
+toolbox.delete_item=Xóa Đối tượng
+toolbox.reverse_direction=Đảo nguợc (V)
+toolbox.split_way=Cắt đôi Lối (X)
+toolbox.merge_ways=Hợp nhất các Lối
+toolbox.straighten_way=Làm Thẳng
+toolbox.make_circular=Làm Tròn
+toolbox.make_right_angled=Làm Vuông góc (Q)
+toolbox.create_parrallel_way=Vẽ Lối Song song (P)
+oauth.gotLinkBox=Nhấn chuột vào liên kết ở duới để mở một trang Web xin bạn cho phép ứng dụng này truy cập vào tài khoản của bạn.
+oauth.authorized=Sau khi bạn cho phép ứng dụng này, bấm nút “Thử Truy cập” ở duới.
+oauth.deniedLabel=<b>Ứng dụng không có phép truy cập tài khoản của bạn. Xin vui lòng kiểm tra lại và thử lần nữa.</b>
+oauth.rememberMe=Nhớ thông tin đăng nhập của tôi
+oauth.permFail=<p>Máy chủ không thể xác nhận thông tin đăng nhập của ứng dụng này.</p>\n<p> <b>Không thể truy cập tài khoản của OAuth.</b> </p>\n<p> Xin vui lòng liên lạc với chủ ứng dụng để biết thêm chi tiết.</p>
+oauth.tempFail=Xuất hiện trục trặc khi kết nối với máy chủ để kiểm tra thông tin đăng nhập. Đây có thể là một vấn đề tạm thời; xin thử lại sau.
+oauth.tryAccessButton=Thử Truy cập
+oauth.cancelButton=Hủy bỏ
+save.editDescription=Xin vui lòng miêu tả các sửa đổi của bạn, để cho những nguời dùng khác hiểu biết những thay đổi trên bản đồ.
+styleSelector.editButton=Sửa đổi…
+backgroundSelector.dim=Làm mờ
+backgroundSelector.sharpen=Làm rõ
+backgroundSelector.editButton=Sửa đổi…
+backgroundSelector.vectorButton=Tập tin Vectơ…
+options.tbcheck=Hiện hộp công cụ
+options.cursorcheck=Hiện con trỏ đặc biệt
+options.ok=OK
diff --git a/l10n/locale/vi_VN/help_dialog.properties b/l10n/locale/vi_VN/help_dialog.properties
new file mode 100644 (file)
index 0000000..b506950
--- /dev/null
@@ -0,0 +1,35 @@
+# vi resources file
+
+help.gettingStarted = Bắt đầu
+help.welcome = Hoan nghênh
+help.whyOpenstreetmap = <p><b>Tại sao OpenStreetMap?</b> OSM là một dịch vụ bản đồ có dữ liệu được cập nhật luôn luôn do công sức của những nguời thường như bạn. Dĩ nhiên bạn có thể sử dụng OSM miễn phí, nhưng nó cũng có điểm lợi khác. Nó là một trong những dịch vụ quan trọng nhất cung cấp bản đồ ở nơi thảm họa: dữ liệu OSM được sử dụng để phối hợp các nỗ lực cứu tế tại Haiti sau động đất. Dữ liệu bản đồ cần phải chính xác và đầy đủ. Hy vọng bạn sẽ tình nguyện để dành một tí thì giờ để đóng góp!</p>
+help.activeMembers = <p><b>• Các thành viên đã có tài khoản:</b> Xin vui lòng đăng nhập vào OpenStreetMap truớc khi sửa đổi</b></p>
+help.newMembers = <p><b>• Các thành viên mới:</b> Xin vui lòng ghé vào <a href="http://www.openstreetmap.org/user/new" target="_blank">http://www.openstreetmap.org</a> để mở tài khoản mới truớc tiên. Sau đó, đăng nhập và trở về đây để cho phép Potlatch 2 truy cập tài khoản và bắt đầu sửa đổi.</p>
+help.introText = <p><b>Potlatch2</b> là một trình vẽ OpenStreetMap (OSM) cho phép bạn sửa đổi trực tiếp từ trang {0}.</p>
+help.introduction = Giới thiệu
+help.controls = Điều khiển
+help.interfaceControls = Các điều khiển giao diện
+help.mapBackground = <p>Chọn lớp nền bản đồ từ trình đơn hoặc thêm một tập tin vectơ của bạn.</p>
+help.colourStyle=<p>Chọn kiểu để hiển thị bản đồ. Có sẵn nhiều kiểu màu sắc và kiểu vẽ đường, cũng như một số tùy chọn khác như Khung lưới.</p>
+help.gps = GPS
+help.createOsmMap = <p>Vẽ dữ liệu bản đồ OSM bằng cách đồ lên tuyến đường GPS của nguời khác.</p>
+help.myGps = MyGPX
+help.displayGps = <p>Hiện các tuyến đường GPS mà bạn đã tải lên OpenStreetMap.</p>
+help.undoRedo = Hoàn tác / Làm lại
+help.madeMistake = <p>Vừa vẽ nhầm lẫn? Chỉ việc bấm Hoàn tác hoặc Làm lại để chỉnh sửa các đối tượng vẽ.</p>
+help.help = Trợ giúp
+help.guideInfomation = <p>Mở hướng dẫn này để chỉ dẫn cách sửa đổi.</p>
+help.save = Lưu
+help.addingFeatures = Bổ sung Đối tượng
+help.addingFeaturesText = <p><i>Truớc tiên, bạn phải nhớ quy tắc quan trọng nhất về cách sử dụng dữ liệu mang tính thương mại: <b>không cho phép</b> sử dụng dữ liệu từ bất kỳ bản đồ có bản quyền hoặc bất kỳ dữ liệu thương mại khác! <b>Không cho phép</b> sao chép, đồ lên, hoặc tái sản xuất bằng bất cứ phương pháp nào! (Nguồn: <a href="http://wiki.openstreetmap.org/wiki/Copyright?uselang=vi" target="_blank">Quyền tác giả – OpenStreetMap Wiki</a>)</i></p> <p></p> <p>Hướng dẫn này chỉ đến các đối tượng hình tuyến như đường sá, đường bộ, đường sắt, và hình dạng tòa nhà với tên <b>lối</b>.</p> <p>Nếu bạn tình cờ nhận thấy rằng các hình tượng trên thanh bên bị mất, có lẽ một địa điểm hay lối đang được chọn trên bản đồ. Để bỏ chọn nó, nhấn chuột vào một vùng trống trên bản đồ; các hình tượng sẽ hiện ngay.</p> <p>Để <b>bổ sung một địa điểm (hoặc nốt)</b>, chỉ việc kéo một hình tượng trưng cho nó từ thanh bên và thả nó vào bản đồ. Xem “Bổ sung địa điểm” để biết thêm về việc tạo địa điểm ưa thích (POI)</p> <p>Để <b>vẽ một lối</b>, nhấn chuột vào bản đồ tại vị trí bắt đầu, rồi nhấn chuột vào mọi vị trí dẫn tiếp. Nhấn đúp hoặc bấm “Enter” trên bàn phím để kết thúc đường vẽ.</p> <p>Để <b>vẽ một hình đa giác (vùng)</b>, nhấn chuột vào bản đồ tại vị trí bắt đầu, rồi nhấn chuột vào mọi vị trí dẫn tiếp – y chang như việc vẽ lối – và nhấn chuột vào nốt đầu tiên để đóng hình đa giác.</p> <p>Nếu bạn vẽ nhầm lẫn, bạn có thể bấm nút Hoàn tác. Bấm “Esc” trên bàn phím để kết thúc sửa đổi điểm hay lối hiện hành.</p>
+help.editBeg = Sửa (Cơ bản)
+help.editingFeatures = Sửa đổi Đối tượng (Cơ bản)
+help.editingFeaturesText = <p>Để <b>thêm một nốt vào giữa một lối đã tồn tại</b>, chọn lối đó, rồi giữ bấm Shift và nhấn chuột vào vị trí của nốt mới.</p> <p>Để <b>xóa một nốt</b>, chọn nó và bấm nút “Xóa Nốt” ở phía duới bên phải hoặc bấm Delete (hoặc Backspace) trên bàn phím.</p> <p>Để <b>xóa cả một lối</b>, chọn lối đó và bấm nút “Xóa Lối” ở phía dưới bên phải, hoặc bấm Shift+Delete (hoặc Shift+Backspace) trên bàn phím.</p> <p>Để <b>di chuyển một điểm hay nốt</b>, chọn và kéo nó.</p> <p>Để <b>di chuyển một lối</b>, bấm và kéo cả lối đó. (Gợi ý: Khi kéo lối, tránh các nốt của lối).</p> <p>Để <b>kéo dài một lối</b>, nhấn chuột vào nốt tại đầu hay đuôi của lối, rồi tiếp tục vẽ lối bình thường.</p> <p>Để <b>vẽ một lối mới liền với đầu hay đuôi của lối đã tồn tại</b>, giữ Shift và nhấn chuột vào nốt tại đầu hay đuôi của lối đó, rồi tiếp tục vẽ lối mới bình thường.</p>
+help.editAdv = Sửa (Nâng cao)
+help.editingFeaturesAdv = Sửa đổi Đối tượng (Nâng cao)
+help.editingFeaturesAdvText = <p>Để <b>cắt đôi một lối</b>, chọn một điểm để cắt và nhấn chuột vào công cụ “Cắt đôi” (đôi kéo) hoặc bấm “X” trên bàn phím. (Gợi ý: Để cắt một lối giữa hai nốt, thêm một nốt mới trước tiên.)</p> <p>Để <b>nối liền hai lối</b>, vẽ các lối bình thường đến khi cần nối liền. Khi bạn chuyển con trỏ lên trên một lối khác, các nốt của lối đó sẽ được tô màu xanh. Nhấn chuột vào một trong những nốt xanh hoặc vào nơi khác nào đó trên lối để nối liền.</p> <p>Để <b>gỡ một lối khỏi nơi nối liền</b>, chọn nốt trên lối mà bạn muốn gỡ ra. Bấm “-” trên bàn phím để dời nốt khỏi lối.</p> <p>Để <b>đảo nguợc một lối</b>, bấm nút “Đảo nguợc” ở phía duới bên phải. Hướng của lối chỉ có ảnh hưởng đến các lối có thẻ “oneway” (một chiều) như các đường một chiều, cũng như các bờ biển, hòn đảo, v.v.</p> <p>Để <b>vẽ các lối song song</b>, chọn lối gốc và bấm nút “Vẽ Lối Song song” ở phía duới bên phải, hoặc bấm “P” trên bàn phím.</p> <p>Để <b>vẽ lối mới chạy theo lối khác</b>, bắt đầu vẽ lối mới, nhấn chuột vào ít nhất hai nốt trên lối khác, rồi cứ bấm “F” trên bàn phím để tự động chạy theo lối khác.</p> <p><i>Đọc <a href="http://wiki.openstreetmap.org/wiki/Potlatch2/Primer?uselang=vi" target="_blank">Hướng dẫn Potlatch2</a> trên OpenStreetMap Wiki để biết những cách sửa đổi nâng cao hơn.</i></p>
+help.tag = Thẻ
+help.taggingFeatures = Gắn thẻ vào Đối tượng
+help.taggingFeaturesText = <p>Trong Potlatch 2, bạn có thể sử dụng các trình đơn, hộp văn bản, và hình tượng để gắn thẻ dễ dàng.</p> <p><b>Gắn thẻ vào một địa điểm, nốt, hay lối</b></p> <p>Chọn nốt hay điểm để sửa đổi và chọn thẻ phù hợp từ thanh bên ở bên trái. Sau khi gắn thẻ vào đối tượng, bạn có thể tùy biến một số chi tiết cơ bản, thí dụ như “Tên”, “Tốc độ Tối đa”, và “Chiều rộng”, tùy thẻ được chọn. Điền biểu mẫu này càng đầy đủ càng tốt.</p><p>Những người dùng nâng cao có thể cần đặt một số thẻ và chi tiết ít phổ biến hơn. Trong trường hợp này, bấm thẻ “Nâng cao” ở phía duới của thanh bên và sửa đổi và bổ sung các thẻ khác.</p> <p>OpenStreetMap Wiki cung cấp một <a href="http://wiki.openstreetmap.org/wiki/Vi:Map_Features?uselang=vi" target="_blank">danh sách thẻ và giá trị thẻ đầy đủ</a>. Xin vui lòng tra cứu tài liệu OSM này khi nào không chắc chắn về các thẻ để sử dụng.</p>
+help.shortcuts = Phím tắt
+help.keyboardShortcuts = Phím tắt
diff --git a/l10n/locale/vi_VN/p2_main.properties b/l10n/locale/vi_VN/p2_main.properties
new file mode 100644 (file)
index 0000000..0b16027
--- /dev/null
@@ -0,0 +1,48 @@
+# vi resources file
+
+main.undo = Hoàn tác
+main.redo = Làm lại
+main.background = Lớp Nền
+main.map_style = Kiểu Bản đồ
+main.gpsButton = Dữ liệu GPS
+main.gps_data = Dữ liệu GPS
+main.my_tracks = Tuyến dường của Tôi
+main.clear_gps = Xóa
+main.help = Trợ giúp
+main.options = Tùy chọn
+main.save = Lưu
+
+tag_viewer.dndprompt = Để thêm dịa điểm mới, kéo nó vào bản đồ
+
+toolbox.delete_node = Xóa Nốt (Delete)
+toolbox.delete_area = Xóa Vùng (Shift+Delete)
+toolbox.delete_way = Xóa Lối (Shift+Delete)
+toolbox.delete_item = Xóa Đối tượng
+toolbox.reverse_direction = Đảo nguợc (V)
+toolbox.split_way = Cắt đôi Lối (X)
+toolbox.merge_ways = Hợp nhất các Lối
+toolbox.straighten_way = Làm Thẳng
+toolbox.make_circular = Làm Tròn
+toolbox.make_right_angled = Làm Vuông góc (Q)
+toolbox.create_parrallel_way = Vẽ Lối Song song (P)
+
+oauth.gotLinkBox=Nhấn chuột vào liên kết ở duới để mở một trang Web xin bạn cho phép ứng dụng này truy cập vào tài khoản của bạn.
+oauth.authorized=Sau khi bạn cho phép ứng dụng này, bấm nút “Thử Truy cập” ở duới.
+oauth.deniedLabel=<b>Ứng dụng không có phép truy cập tài khoản của bạn. Xin vui lòng kiểm tra lại và thử lần nữa.</b>
+oauth.rememberMe=Nhớ thông tin đăng nhập của tôi
+oauth.permFail=<p>Máy chủ không thể xác nhận thông tin đăng nhập của ứng dụng này.</p><p> <b>Không thể truy cập tài khoản của OAuth.</b> </p><p> Xin vui lòng liên lạc với chủ ứng dụng để biết thêm chi tiết.</p>
+oauth.tempFail=Xuất hiện trục trặc khi kết nối với máy chủ để kiểm tra thông tin đăng nhập. Đây có thể là một vấn đề tạm thời; xin thử lại sau.
+oauth.tryAccessButton=Thử Truy cập
+oauth.cancelButton=Hủy bỏ
+
+save.editDescription=Xin vui lòng miêu tả các sửa đổi của bạn, để cho những nguời dùng khác hiểu biết những thay đổi trên bản đồ.
+
+styleSelector.editButton=Sửa đổi…
+backgroundSelector.dim=Làm mờ
+backgroundSelector.sharpen=Làm rõ
+backgroundSelector.editButton=Sửa đổi…
+backgroundSelector.vectorButton=Tập tin Vectơ...
+
+options.tbcheck=Hiện hộp công cụ
+options.cursorcheck=Hiện con trỏ đặc biệt
+options.ok=OK
diff --git a/l10n/locale/zh_CN/p2_main.properties b/l10n/locale/zh_CN/p2_main.properties
new file mode 100644 (file)
index 0000000..5feaf76
--- /dev/null
@@ -0,0 +1,44 @@
+# Messages for Simplified Chinese (‪中文(简体)‬)
+# Exported from translatewiki.net
+# Author: Mmyangfl
+
+main.undo=撤销
+main.redo=重做
+main.background=背景
+main.map_style=地图样式
+main.gpsButton=GPS 数据
+main.gps_data=GPS 数据
+main.my_tracks=我的轨迹
+main.clear_gps=清除
+main.help=帮助
+main.options=选项
+main.save=保存
+tag_viewer.dndprompt=拖动它们到地图上以添加新的点
+toolbox.delete_node=删除节点(Delete)
+toolbox.delete_area=删除区域(Shift+Delete)
+toolbox.delete_way=删除路径(Shift+Delete)
+toolbox.delete_item=删除项目
+toolbox.reverse_direction=逆转方向(V)
+toolbox.split_way=分拆路径(X)
+toolbox.merge_ways=合并路径
+toolbox.straighten_way=拉直路径
+toolbox.make_circular=制作圆形
+toolbox.make_right_angled=制作直角(Q)
+toolbox.create_parrallel_way=创建平行路径(P)
+oauth.gotLinkBox=点击下面的链接打开一个网页,在那里你会被要求授权这个应用程序可以访问。
+oauth.authorized=一旦你已授权访问,点击下面的“尝试访问”按钮
+oauth.deniedLabel=<b>访问被拒绝,请检查,然后重试</b>
+oauth.rememberMe=记住我
+oauth.permFail=<p>服务器拒绝此应用程序的凭据 -- 无法获得授权链接。             </p>\n<p>       <b>OAuth 访问将不可用。</b>              </p>\n<p>       请联系应用程序提供商,以找出发生了什么事情。</p>
+oauth.tempFail=联系服务器获得授权时有一个问题。    这可能是一个暂时的错误,请稍后再试。
+oauth.tryAccessButton=尝试访问
+oauth.cancelButton=取消
+save.editDescription=请输入您的修改的说明。这将被用来告诉其他制图者您在做什么。
+styleSelector.editButton=编辑...
+backgroundSelector.dim=亮度
+backgroundSelector.sharpen=锐化
+backgroundSelector.editButton=编辑...
+backgroundSelector.vectorButton=矢量文件...
+options.tbcheck=显示工具栏
+options.cursorcheck=使用自定义光标
+options.ok=确定
index b96a414267afb347431fb4505b78eb140b51a64a..2a5fa1cebd7d369a6a2f03c44f8b14fa6c9e5c64 100644 (file)
@@ -2,22 +2,31 @@
 <LocaleMap enableLog="false"
     xmlns:mx="http://www.adobe.com/2006/mxml"
     xmlns:factory="mx.core.*"
-    xmlns="library://ns.babelfx.org/l10n/flex/" >
+    xmlns="http://l10n.babelfx.org/" >
 
   <!-- Support for Locale ResourceBundle changes -->
   <mx:Script>
     <![CDATA[
-      import com.mindspace.l10n.commands.ExternalLocaleCommand;
+      import org.babelfx.commands.ExternalLocaleCommand;
+      import org.babelfx.events.LocaleEvent;
       import mx.resources.ResourceManager;
       import mx.resources.IResourceManager;
 
       import net.systemeD.potlatch2.help.HelpDialog;
+
       import net.systemeD.potlatch2.TagViewer;
       import net.systemeD.potlatch2.Toolbox;
+      import net.systemeD.potlatch2.StyleSelector;
+      import net.systemeD.potlatch2.BackgroundSelector;
+
+      import net.systemeD.potlatch2.save.OAuthPanel;
+      import net.systemeD.potlatch2.save.SaveDialog;
+
+      import net.systemeD.potlatch2.options.OptionsDialog;
 
       private function onLocaleChanged(event:Event):void {
           var rMngr : IResourceManager = ResourceManager.getInstance();
-          var sri : SmartResourceInjector = event.target as SmartResourceInjector;
+          var sri : ResourceInjector = event.target as ResourceInjector;
           var options : Array = [
                                   { label : rMngr.getString('p2_main','main.gps_data') },
                                   { label : rMngr.getString('p2_main','main.my_tracks') },
   </commandFactory>
 
   <!--
-  SmartResourceInjectors for targeted class instantiations. Instead of dependency injection of UI instances,
-  we use SRI(s) here to remove any need to know view hierarchy relationships... we simply want a reference
+  ResourceInjectors(at v2) for targeted class instantiations. Instead of dependency injection of UI instances,
+  we use RI(s) here to remove any need to know view hierarchy relationships... we simply want a reference
   to the UI instance when ready.
   -->
 
-  <SmartResourceInjector bundleName="help_dialog" target="{HelpDialog}">
-    <ResourceProxy property="gettingStarted.text" key="help.gettingStarted" />
-    <ResourceProxy property="welcome.label" key="help.welcome" />
-  </SmartResourceInjector>
-
-  <SmartResourceInjector bundleName="p2_main" target="{potlatch2}" localeChange="onLocaleChanged(event)">
-    <ResourceProxy property="bgButton.label" key="main.background" />
-    <ResourceProxy property="styleButton.label" key="main.map_style" />
-    <ResourceProxy property="undo.label" key="main.undo" />
-    <ResourceProxy property="redo.label" key="main.redo" />
-    <ResourceProxy property="helpButton.label" key="main.help" />
-    <ResourceProxy property="optionsButton.label" key="main.options" />
-    <ResourceProxy property="saveButton.label" key="main.save" />
-  </SmartResourceInjector>
-
-  <SmartResourceInjector bundleName="p2_main" target="{TagViewer}">
-    <ResourceProxy property="dndPrompt" key="tag_viewer.dndprompt" />
-  </SmartResourceInjector>
-
-  <SmartResourceInjector bundleName="p2_main" target="{Toolbox}">
-    <ResourceProxy property="deleteNode" key="toolbox.delete_node" />
-    <ResourceProxy property="deleteWay" key="toolbox.delete_way" />
-    <ResourceProxy property="deleteArea" key="toolbox.delete_area" />
-    <ResourceProxy property="deleteItem" key="toolbox.delete_item" />
-    <ResourceProxy property="reverseButton.toolTip" key="toolbox.reverse_direction" />
-    <ResourceProxy property="splitButton.toolTip" key="toolbox.split_way" />
-    <ResourceProxy property="mergeButton.toolTip" key="toolbox.merge_ways" />
-    <ResourceProxy property="straightenButton.toolTip" key="toolbox.straighten_way" />
-    <ResourceProxy property="circulariseButton.toolTip" key="toolbox.make_circular" />
-    <ResourceProxy property="quadrilateraliseButton.toolTip" key="toolbox.make_right_angled" />
-    <ResourceProxy property="parralleliseButton.toolTip" key="toolbox.create_parrallel_way" />
-  </SmartResourceInjector>
-
-</LocaleMap>
\ No newline at end of file
+  <ResourceInjector bundleName="help_dialog" target="{HelpDialog}">
+    <ResourceSetter property="gettingStarted.text" key="help.gettingStarted" />
+    <ResourceSetter property="welcome.label" key="help.welcome" />
+    <ResourceSetter property="whyOpenStreetMap.htmlText" key="help.whyOpenstreetmap" />
+    <ResourceSetter property="activeMembers.htmlText" key="help.activeMembers" />
+    <ResourceSetter property="newMembersText.htmlText" key="help.newMembers" />
+    <!-- wanna call loaderInfo.parameters["site_name"] or getIntroText() -->
+    <!-- <ResourceSetter property="introText.htmlText" key="help.introText" parameters="that"/> -->
+    <ResourceSetter property="introduction.label" key="help.introduction" />
+    <ResourceSetter property="Controls.label" key="help.controls" />
+    <ResourceSetter property="interfaceControls.label" key="help.interfaceControls"/>
+    <ResourceSetter property="background.label" key="help.background"/>
+    <ResourceSetter property="mapBackground.htmlText" key="help.mapBackground"/>
+    <ResourceSetter property="mapStyle.label" key="help.mapStyle"/>
+    <ResourceSetter property="colourStyle.htmlText" key="help.colourStyle"/>
+    <ResourceSetter property="gps.label" key="help.gps"/>
+    <ResourceSetter property="createOsmMap.htmlText" key="help.createOsmMap"/>
+    <ResourceSetter property="undoRedo.label" key="help.undoRedo" />
+    <ResourceSetter property="madeMistake.htmlText" key="help.madeMistake" />
+    <ResourceSetter property="help.label" key="help.help" />
+    <ResourceSetter property="guideInfomation.htmlText" key="help.guideInfomation" />
+    <ResourceSetter property="save.label" key="help.save" />
+ <!--   <ResourceSetter property="saveText.htmlText" key="help.saveText" />    -->
+    <ResourceSetter property="addingFeatures.label" key="help.addingFeatures" />
+    <ResourceSetter property="addingFeaturesText.htmlText" key="help.addingFeaturesText" />
+    <ResourceSetter property="editBeg.label" key="help.editBeg" />
+    <ResourceSetter property="editingFeatures.label" key="help.editingFeatures" />
+    <ResourceSetter property="editingFeaturesText.htmlText" key="help.editingFeaturesText" />
+    <ResourceSetter property="editAdv.label" key="help.editAdv" />
+    <ResourceSetter property="editingFeaturesAdv.label" key="help.editingFeaturesAdv"/>
+    <ResourceSetter property="editingFeaturesAdvText.htmlText" key="help.editingFeaturesAdvText"/>
+    <ResourceSetter property="tag.label" key="help.tag" />
+    <ResourceSetter property="taggingFeatures.label" key="help.taggingFeatures" />
+    <ResourceSetter property="taggingFeaturesText.htmlText" key="help.taggingFeaturesText" />
+    <ResourceSetter property="shortcuts.label" key="help.shortcuts" />
+    <ResourceSetter property="keyboardShortcuts.label" key="help.keyboardShortcuts" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{potlatch2}" localeChange="onLocaleChanged(event);">
+    <ResourceSetter property="bgButton.label" key="main.background" />
+    <ResourceSetter property="styleButton.label" key="main.map_style" />
+    <ResourceSetter property="undo.label" key="main.undo" />
+    <ResourceSetter property="redo.label" key="main.redo" />
+    <ResourceSetter property="helpButton.label" key="main.help" />
+    <ResourceSetter property="optionsButton.label" key="main.options" />
+    <ResourceSetter property="saveButton.label" key="main.save" />
+    <ResourceSetter property="gpsButton.label" key="main.gpsButton" />
+  <!--   These are setted on onLocaleChanged()
+    <ResourceSetter property="gpsData.label" key="main.gps_data" />
+    <ResourceSetter property="myTrack.label" key="main.my_track" />
+    <ResourceSetter property="clearGps.label" key="main.clear_gps" />
+    -->
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{OAuthPanel}">
+    <ResourceSetter property="gotLinkBox.text" key="oauth.gotLinkBox" />
+    <ResourceSetter property="authorized.text" key="oauth.authorized" />
+    <ResourceSetter property="deniedLabel.text" key="oauth.deniedLabel" />
+    <ResourceSetter property="rememberMe.label" key="oauth.rememberMe" />
+    <ResourceSetter property="permFail.htmlText" key="oauth.permFail" />
+    <ResourceSetter property="tempFail.text" key="oauth.tempFail" />
+    <ResourceSetter property="tryAccessButton.label" key="oauth.tryAccessButton" />
+    <ResourceSetter property="cancelButton.label" key="oauth.cancelButton" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{TagViewer}">
+    <ResourceSetter property="dndPrompt" key="tag_viewer.dndprompt" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{Toolbox}">
+    <ResourceSetter property="deleteNode" key="toolbox.delete_node" />
+    <ResourceSetter property="deleteWay" key="toolbox.delete_way" />
+    <ResourceSetter property="deleteArea" key="toolbox.delete_area" />
+    <ResourceSetter property="deleteItem" key="toolbox.delete_item" />
+    <ResourceSetter property="reverseButton.toolTip" key="toolbox.reverse_direction" />
+    <ResourceSetter property="splitButton.toolTip" key="toolbox.split_way" />
+    <ResourceSetter property="mergeButton.toolTip" key="toolbox.merge_ways" />
+    <ResourceSetter property="straightenButton.toolTip" key="toolbox.straighten_way" />
+    <ResourceSetter property="circulariseButton.toolTip" key="toolbox.make_circular" />
+    <ResourceSetter property="quadrilateraliseButton.toolTip" key="toolbox.make_right_angled" />
+    <ResourceSetter property="parralleliseButton.toolTip" key="toolbox.create_parrallel_way" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{StyleSelector}">
+    <ResourceSetter property="editButton.label" key="styleSelector.editButton" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{BackgroundSelector}">
+    <ResourceSetter property="dim.label" key="backgroundSelector.dim" />
+    <ResourceSetter property="sharpen.label" key="backgroundSelector.sharpen" />
+    <ResourceSetter property="editButton.label" key="backgroundSelector.editButton" />
+    <ResourceSetter property="vectorButton.label" key="backgroundSelector.vectorButton" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{SaveDialog}">
+    <ResourceSetter property="editDescription.text" key="save.editDescription" />
+    <ResourceSetter property="commentLabel.label" key="save.commentLabel" />
+  </ResourceInjector>
+
+  <ResourceInjector bundleName="p2_main" target="{OptionsDialog}">
+    <ResourceSetter property="tbcheck.label" key="options.tbcheck" />
+    <ResourceSetter property="cursorcheck.label" key="options.cursorcheck" />
+    <ResourceSetter property="ok.label" key="option.ok" />
+  </ResourceInjector>
+</LocaleMap>
diff --git a/lib/Framework_BabelFx-2.0.4.swc b/lib/Framework_BabelFx-2.0.4.swc
new file mode 100644 (file)
index 0000000..e4ec660
Binary files /dev/null and b/lib/Framework_BabelFx-2.0.4.swc differ
diff --git a/lib/Framework_BabelFx-g400a96.swc b/lib/Framework_BabelFx-g400a96.swc
deleted file mode 100644 (file)
index ccba27d..0000000
Binary files a/lib/Framework_BabelFx-g400a96.swc and /dev/null differ
diff --git a/lib/ant-contrib-1.0b3.jar b/lib/ant-contrib-1.0b3.jar
new file mode 100644 (file)
index 0000000..a7cd45b
Binary files /dev/null and b/lib/ant-contrib-1.0b3.jar differ
diff --git a/net/systemeD/controls/Spinner.as b/net/systemeD/controls/Spinner.as
new file mode 100644 (file)
index 0000000..038aefa
--- /dev/null
@@ -0,0 +1,68 @@
+package net.systemeD.controls {
+       import flash.events.TimerEvent;
+       import flash.events.Event;
+       import flash.display.Sprite;
+       import flash.display.Shape;
+       import flash.utils.Timer;
+       import flash.filters.GlowFilter;
+       
+       // Adapted from http://www.stevensacks.net/2008/10/01/as3-apple-style-preloader/
+
+       public class Spinner extends Sprite {
+               private var timer:Timer;
+               private var slices:int;
+               private var radius:int;
+
+               public function Spinner(slices:int = 12, radius:int = 6) {
+                       super();
+                       this.slices = slices;
+                       this.radius = radius;
+                       draw();
+
+                       var filter:GlowFilter=new GlowFilter(0xFFFFFF,1,4,4,6);
+                       this.filters = [filter];
+               }
+
+               public function start():void {
+                       visible=true;
+                       if (timer) return;
+                       timer = new Timer(65);
+                       timer.addEventListener(TimerEvent.TIMER, onTimer, false, 0, true);
+                       timer.start();
+               }
+
+               public function stop():void {
+                       visible=false;
+                       if (!timer) return;
+                       timer.reset();
+                       timer.removeEventListener(TimerEvent.TIMER, onTimer);
+                       timer = null;
+               }
+
+               private function onTimer(event:TimerEvent):void {
+                       rotation = (rotation + (360 / slices)) % 360;
+               }
+               
+               private function draw():void {
+                       var i:int = slices;
+                       var degrees:int = 360 / slices;
+                       while (i--) {
+                               var slice:Shape = getSlice();
+                               slice.alpha = Math.max(0.2, 1 - (0.1 * i));
+                               var radianAngle:Number = (degrees * i) * Math.PI / 180;
+                               slice.rotation = -degrees * i;
+                               slice.x = Math.sin(radianAngle) * radius;
+                               slice.y = Math.cos(radianAngle) * radius;
+                               addChild(slice);
+                       }
+               }
+
+               private function getSlice():Shape {
+                       var slice:Shape = new Shape();
+                       slice.graphics.beginFill(0x666666);
+                       slice.graphics.drawRoundRect(-1, 0, 2, 6, 12, 12);
+                       slice.graphics.endFill();
+                       return slice;
+               }
+       }
+}
index 8aa038bb2a349fbaded354ad1709ef1ca5811d1a..7bbf018dda90677f8eb4c7796453f17d5aee83d9 100644 (file)
@@ -1,24 +1,22 @@
 package net.systemeD.halcyon {
 
-       /*
-               === DebugURLRequest ===
-
-               If nocache has been set to 'true' via FlashVars, this will make the URLRequest using 
-               POST rather than GET - thereby preventing FP from caching it
-               (see http://www.ultrashock.com/forums/actionscript/force-reload-files-only-using-as3-123408.html).
-               
-               Sadly we can't just subclass URLRequest, which is defined as final. So you need to create your 
-               new DebugURLRequest, then refer to its .request property.
-               
-               We use an evil Global because we don't know where loaderInfo.parameters will be.
-
-       */
-
        import flash.net.URLRequest;
        import flash.net.URLRequestMethod;
        import flash.system.Capabilities;
        import net.systemeD.halcyon.Globals;
 
+    /**
+    * If nocache has been set to 'true' via FlashVars, this will make the URLRequest using
+    * POST rather than GET - thereby preventing FP from caching it.
+    *
+    * <p>Sadly we can't just subclass URLRequest, which is defined as final. So you need to create your
+    * new DebugURLRequest, then refer to its .request property.</p>
+    *
+    * <p>We use an evil Global because we don't know where loaderInfo.parameters will be.</p>
+    *
+    * @see http://www.ultrashock.com/forums/actionscript/force-reload-files-only-using-as3-123408.html
+    */
+
        public class DebugURLRequest {
 
                public var request:URLRequest;
index 81a2419680ea2a22e67de2b584b030dd67d9e79c..294f9d946d966c159bd1a553bed4fb1f92511444 100644 (file)
@@ -3,14 +3,19 @@ package net.systemeD.halcyon {
        import flash.events.*;
     import flash.external.ExternalInterface;
 
-       /* JSController provides an interface for Halcyon to call the enclosing page, via JavaScript
-         */
+       /**
+       * JSController provides an interface for Halcyon to call the enclosing page, via JavaScript.
+       */
 
     public class JSController implements MapController {
 
         private var map:Map;
-               private var jsresponder:String;                                 // JavaScript function called when user clicks
+               private var jsresponder:String;
 
+        /**
+        * @param map
+        * @param jsresponder JavaScript function called when user clicks
+        */
         public function JSController(map:Map, jsresponder:String) {
             this.map = map;
             this.jsresponder = jsresponder;
index b84e0fc6a90e7eb6150e2da4563e5f2ed80f85f7..3d3e9497f5287ac4f474483e2903cd362ebe78b4 100644 (file)
@@ -64,6 +64,7 @@ package net.systemeD.halcyon {
                public const NOT_DRAGGING:uint=0;                               //  |
                public const NOT_MOVED:uint=1;                                  //  |
                public const DRAGGING:uint=2;                                   //  |
+               public const SWALLOW_MOUSEUP:uint=3;                    //  |
                /** How far the map can be dragged without actually triggering a pan. */
                public const TOLERANCE:uint=7;                                  //  |
                
@@ -222,7 +223,6 @@ package net.systemeD.halcyon {
         * The bounding box for the download is taken from the current map edges.
         */
                public function download():void {
-                       this.dispatchEvent(new MapEvent(MapEvent.DOWNLOAD, {minlon:edge_l, maxlon:edge_r, maxlat:edge_t, minlat:edge_b} ));
                        for (var i:uint=0; i<paintContainer.numChildren; i++)
                                if(getLayerAt(i).visible == true) {
                     getLayerAt(i).connection.loadBbox(edge_l,edge_r,edge_t,edge_b);
@@ -390,7 +390,8 @@ package net.systemeD.halcyon {
                /** Prepare for being dragged by recording start time and location of mouse. */
                public function mouseDownHandler(event:MouseEvent):void {
                        if (!_draggable) { return; }
-                       dragstate=NOT_MOVED;
+                       if (dragstate==DRAGGING) { moveMap(x,y); dragstate=SWALLOW_MOUSEUP; }   // cancel drag if mouse-up occurred outside the window (thanks, Safari)
+                       else { dragstate=NOT_MOVED; }
                        lastxmouse=stage.mouseX; downX=stage.mouseX;
                        lastymouse=stage.mouseY; downY=stage.mouseY;
                        downTime=new Date().getTime();
index 3dfeeba14dc60db333110927f5334404a23b8196..907d6cf5a80c26ed1885872a57fba7a4c43f5613 100644 (file)
@@ -17,7 +17,7 @@ package net.systemeD.halcyon {
                public static const NUDGE_BACKGROUND:String = "nudge_background";
         /** Map has been created and is ready, although data is not yet downloaded. */
         public static const INITIALISED:String = "initialized";
-               /** Backrgound imagery has changed to one with attribution that must not be obscured. */
+               /** Background imagery has changed to one with attribution that must not be obscured. */
                public static const BUMP:String = "bump";
                public static const MOUSE_MOVE:String="mouse_move";
                public static const ERROR:String = "error";                             // ** FIXME - this should be a dedicated ErrorEvent class
index 5d2e1eacdcf11ea4222a5bd9ab90ed5a53613156..84d6576f9c8c9ec410ab8dbeff0dceac800529b5 100644 (file)
@@ -50,6 +50,11 @@ package net.systemeD.halcyon {
                public function init(params:Object, update:Boolean=false):void {
                        baseurl=params.url;
                        scheme =params.scheme ? params.scheme : '900913';
+                       requests=[]; waiting=loadcount=0;
+                       for (var tilename:String in tiles) {
+                               if (tiles[tilename] is Loader) tiles[tilename].unload();
+                               tiles[tilename]=null;
+                       }
                        tiles={};
                        offset_lon=offset_lat=x=y=0;
                        while (numChildren) { removeChildAt(0); }
@@ -133,8 +138,8 @@ package net.systemeD.halcyon {
                                        waiting++;
                                        var loader:Loader = new Loader();
                                        tiles[map.scale+','+tx+','+ty]=loader;
-                                       loader.contentLoaderInfo.addEventListener(Event.INIT, doImgInit);
-                       loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, missingTileError);
+                                       loader.contentLoaderInfo.addEventListener(Event.INIT, doImgInit, false, 0, true);
+                                       loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, missingTileError, false, 0, true);
                                        loader.load(new URLRequest(tileURL(tx,ty,tz)), 
                                                    new LoaderContext(true));
                                        l=this.getChildAt(map.scale-map.MINSCALE);
index 5893d8491f3a151fe99c3922ceb3ad6521807df6..5c67ba55f0601db1f338595dc4f3577104180ed3 100644 (file)
@@ -7,23 +7,27 @@ package net.systemeD.halcyon.connection {
     import net.systemeD.halcyon.AttentionEvent;
     import net.systemeD.halcyon.MapEvent;
     import net.systemeD.halcyon.connection.actions.*;
+    import net.systemeD.halcyon.connection.bboxes.*;
     import net.systemeD.halcyon.Globals;
+    import net.systemeD.halcyon.styleparser.CSSTransform;
 
        public class Connection extends EventDispatcher {
 
                public var name:String;
                public var statusFetcher:StatusFetcher;
                public var inlineStatus:Boolean = false;
+               public var cssTransform:CSSTransform;
         protected var apiBaseURL:String;
         protected var policyURL:String;
         protected var params:Object;
 
-               public function Connection(cname:String,api:String,policy:String,initparams:Object=null) {
+               public function Connection(cname:String,api:String,policy:String,initparams:Object=null,transform:CSSTransform=null) {
                        initparams = (initparams!=null ? initparams:{});
                        name=cname;
                        apiBaseURL=api;
                        policyURL=policy;
                        params=initparams;
+                       cssTransform=transform;
                }
 
         public function getParam(name:String, defaultValue:String):String {
@@ -78,6 +82,10 @@ package net.systemeD.halcyon.connection {
                public static var RESUME_REDRAW:String = "resume_redraw";
         public static var TRACES_LOADED:String = "traces_loaded";
 
+               /** maximum number of /map calls to request for each pan/zoom */
+               protected const MAX_BBOXES:uint=3;
+               protected var fetchSet:FetchSet = new FetchSet();
+
         // store the data we download
         private var negativeID:Number = -1;
         private var nodes:Object = {};
@@ -94,7 +102,6 @@ package net.systemeD.halcyon.connection {
         private var traces:Vector.<Trace> = new Vector.<Trace>();
         private var nodePositions:Object = {};
         protected var traces_loaded:Boolean = false;
-               private var loadedBboxes:Array = [];
 
                /** maximum number of ways to keep in memory before purging */
                protected const MAXWAYS:uint=3000;
@@ -392,29 +399,12 @@ package net.systemeD.halcyon.connection {
                        return modified;
                }
 
-               // Keep track of the bboxes we've loaded
-
-               /** Has the data within this bbox already been loaded? */
-               protected function isBboxLoaded(left:Number,right:Number,top:Number,bottom:Number):Boolean {
-                       var l:Number,r:Number,t:Number,b:Number;
-                       for each (var box:Array in loadedBboxes) {
-                               l=box[0]; r=box[1]; t=box[2]; b=box[3];
-                               if (left>=l && left<=r && right>=l && right<=r && top>=b && top<=t && bottom>=b && bottom<=t) {
-                                       return true;
-                               }
-                       }
-                       return false;
-               }
-               /** Mark that bbox is loaded */
-               protected function markBboxLoaded(left:Number,right:Number,top:Number,bottom:Number):void {
-                       if (isBboxLoaded(left,right,top,bottom)) return;
-                       loadedBboxes.push([left,right,top,bottom]);
-               }
                /** Purge all data if number of ways exceeds limit */
                public function purgeIfFull(left:Number,right:Number,top:Number,bottom:Number):void {
                        if (waycount<=MAXWAYS) return;
                        purgeOutside(left,right,top,bottom);
-                       loadedBboxes=[[left,right,top,bottom]];
+                       fetchSet=new FetchSet();
+                       fetchSet.add(new Box().fromBbox(left,bottom,right,top));
                }
 
                // Changeset tracking
index 522d57d5c04355540f8c722522e3bbab0bb040a8..e05462e56efd179bad74c4be4313c71738c703e0 100644 (file)
@@ -31,6 +31,7 @@ package net.systemeD.halcyon.connection {
             this._version = version;
             this._uid = uid;
             this._timestamp = timestamp;
+            if (connection.cssTransform) tags=connection.cssTransform.run(this,tags);
             this.tags = tags;
                        this._loaded = loaded;
             modified = id < 0;
@@ -154,7 +155,7 @@ package net.systemeD.halcyon.connection {
 
         /** Change oldKey=[value] to newKey=[value], with optional undoability.
          * @param oldKey Name of key to rename
-         * @parame newKey New name of key
+         * @param newKey New name of key
          * @param performAction Single-argument function to pass a SetTagKeyAction to.
          * @example renameTag("building", "amenity", MainUndoStack.getGlobalStack().addAction);
          */
index 25cf8ca45cf330a43089bddebedf938692aa6b3e..91db46d059d1cd6a74aa4364023cdc0d69067d30 100644 (file)
@@ -60,14 +60,15 @@ package net.systemeD.halcyon.connection {
 
                                // **** Specific WTFE-parsing code starts here
                                // FIXME: should be generalised
-                               //              if all users are "yes" or "auto", status is 'ok' (green)
-                               //              if first user is "no", status is 'no' (red)
-                               //              if any other users are no, status is 'partial' (softer red)
-                               //              otherwise, status is 'unsure' (yellow)
+                               //              if all users are "yes" or "auto", status is 'ok' (3, green)
+                               //              if first user is "no", status is 'no' (0, red)
+                               //              if any other users are no, status is 'partial' (1, softer red)
+                               //              otherwise, status is 'unsure' (2, yellow)
                                var s:uint=3;   // ok
                                for each (var user:XML in exml.user) {
-                                       if (user.@decision=='no' && user.@version=='first') { s=0; }    // no from v1
-                                       else if (user.@decision=='no') { s=Math.min(s,1); }                             // no from later version
+                                       if (user.@severity=='harmless' || user.@severity=='none') continue;     // ignore if harmless
+                                       if (user.@decision=='no' && user.@version=='first') { s=0; }            // no from v1
+                                       else if (user.@decision=='no') { s=Math.min(s,1); }                                     // no from later version
                                        else if (user.@decision=='undecided' || user.@decision=='anonymous') { s=Math.min(s,2); }       // unsure
                                }
                                status=STATUSES[s];
index 2de1bdb404a6c8edcac0b4c8b4feca088169c689..d3bc0f2d8cb8f6bd325679d2040a6b70b921973e 100644 (file)
@@ -126,7 +126,7 @@ package net.systemeD.halcyon.connection {
                                }
                        }
 
-                       Trace.parseTrkSegs(file,connection,action);
+                       Trace.parseTrkSegs(file,connection,action,false);
                        
             for each (var wpt:XML in file.wpt) {
                 var tags:Object = {};
@@ -143,9 +143,10 @@ package net.systemeD.halcyon.connection {
         }
 
                /* Draw ways from <trkseg>s, with elementary filter to remove points within 3 metres of each other. 
+                  Optionally split way if more than 50m from previous point.
                   FIXME: do auto-joining of dupes as per Importer. */
 
-               public static function parseTrkSegs(file:XML, connection:Connection, action:CompositeUndoableAction):void {
+               public static function parseTrkSegs(file:XML, connection:Connection, action:CompositeUndoableAction, smartSplitting:Boolean=false):void {
                        for each (var ns:Namespace in file.namespaceDeclarations()) {
                                if (ns.uri.match(/^http:\/\/www\.topografix\.com\/GPX\/1\/[01]$/)) { default xml namespace = ns; }
                        }
@@ -160,8 +161,8 @@ package net.systemeD.halcyon.connection {
                                        if (isNaN(lastlat)) { lastlat = lat; lastlon = lon; }
                                        dist=Trace.greatCircle(lat, lon, lastlat, lastlon);
                                        if (dist>3) {
-                                               if (dist>50 || nodestring.length>500) {
-                                                       if (dist<=50) nodestring.push(connection.createNode({}, lat, lon, action.push));
+                                               if ((dist>50 && smartSplitting) || nodestring.length>500) {
+                                                       if (dist<=50 || !smartSplitting) nodestring.push(connection.createNode({}, lat, lon, action.push));
                                                        if (nodestring.length>1) connection.createWay({}, nodestring, action.push);
                                                        nodestring=[];
                                                }
index 48159ba880ac46a68381727f8f0512c77155dcd0..f8c0bfac2d45b4c9537a3126b73406dfd1c47796 100644 (file)
@@ -7,6 +7,7 @@ package net.systemeD.halcyon.connection {
        import org.iotashan.oauth.*;
 
        import net.systemeD.halcyon.MapEvent;
+    import net.systemeD.halcyon.connection.bboxes.*;
 
        /**
        * XMLBaseConnection is the common code between connecting to an OSM server
@@ -42,6 +43,7 @@ package net.systemeD.halcyon.connection {
                                        minlat=map.bounds.@minlat;
                                        maxlat=map.bounds.@maxlat;
                                        singleEntityRequest=false;
+                                       fetchSet.add(new Box().fromBbox(minlon,minlat,maxlon,maxlat));
                                }
 
                                for each(var relData:XML in map.relation) {
@@ -148,6 +150,7 @@ package net.systemeD.halcyon.connection {
                                                        setWay(way,false);
                                                        createdEntities.push(way);
                                                } else {
+                                                       if (!way.loaded) createdEntities.push(way);
                                                        waycount++;
                                                        way.update(version, tags, true, true, nodelist, uid, timestamp);
                                                        if ( inlineStatus ) { way.status = data.@status; }
@@ -155,8 +158,6 @@ package net.systemeD.halcyon.connection {
                                                }
                                        }
                                }
-                       
-                               markBboxLoaded(minlon,maxlon,maxlat,minlat);
                                registerPOINodes();
                        }
 
index 9b94f2079f92792359cfcd5266fc59f2c8d6609b..fc046c251964e5f29d618aac1b056a6e838d21d6 100644 (file)
@@ -9,6 +9,7 @@ package net.systemeD.halcyon.connection {
 
        import net.systemeD.halcyon.AttentionEvent;
        import net.systemeD.halcyon.MapEvent;
+    import net.systemeD.halcyon.connection.bboxes.*;
 
     /**
     * XMLConnection provides all the methods required to connect to a live
@@ -18,6 +19,8 @@ package net.systemeD.halcyon.connection {
     */
        public class XMLConnection extends XMLBaseConnection {
 
+               private const MARGIN:Number=0.05;
+
         /**
         * Create a new XML connection
         * @param name The name of the connection
@@ -38,21 +41,29 @@ package net.systemeD.halcyon.connection {
                override public function loadBbox(left:Number,right:Number,
                                                                top:Number,bottom:Number):void {
             purgeIfFull(left,right,top,bottom);
-            if (isBboxLoaded(left,right,top,bottom)) return;
-
-            // enlarge bbox by 20% on each edge
-            var xmargin:Number=(right-left)/5;
-            var ymargin:Number=(top-bottom)/5;
-            left-=xmargin; right+=xmargin;
-            bottom-=ymargin; top+=ymargin;
-
-            var mapVars:URLVariables = new URLVariables();
-            mapVars.bbox= left+","+bottom+","+right+","+top;
-
-            var mapRequest:URLRequest = new URLRequest(apiBaseURL+"map");
-            mapRequest.data = mapVars;
-
-            sendLoadRequest(mapRequest);
+                       var requestBox:Box=new Box().fromBbox(left,bottom,right,top);
+                       var boxes:Array;
+                       try {
+                               boxes=fetchSet.getBoxes(requestBox,MAX_BBOXES);
+                       } catch(err:Error) {
+                               boxes=[requestBox];
+                       }
+                       for each (var box:Box in boxes) {
+                               // enlarge bbox by given margin on each edge
+                               var xmargin:Number=(box.right-box.left)*MARGIN;
+                               var ymargin:Number=(box.top-box.bottom)*MARGIN;
+                               left  =box.left  -xmargin; right=box.right+xmargin;
+                               bottom=box.bottom-ymargin; top  =box.top  +ymargin;
+
+                               dispatchEvent(new MapEvent(MapEvent.DOWNLOAD, {minlon:left, maxlon:right, maxlat:top, minlat:bottom} ));
+
+                               // send HTTP request
+                               var mapVars:URLVariables = new URLVariables();
+                               mapVars.bbox=left+","+bottom+","+right+","+top;
+                               var mapRequest:URLRequest = new URLRequest(apiBaseURL+"map");
+                               mapRequest.data = mapVars;
+                               sendLoadRequest(mapRequest);
+                       }
                }
 
                override public function loadEntityByID(type:String, id:Number):void {
@@ -63,20 +74,24 @@ package net.systemeD.halcyon.connection {
 
                private function sendLoadRequest(request:URLRequest):void {
                        var mapLoader:URLLoader = new URLLoader();
+            var errorHandler:Function = function(event:IOErrorEvent):void {
+                errorOnMapLoad(event, request);
+            }
                        mapLoader.addEventListener(Event.COMPLETE, loadedMap);
-                       mapLoader.addEventListener(IOErrorEvent.IO_ERROR, errorOnMapLoad);
+                       mapLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
                        mapLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, mapLoadStatus);
             request.requestHeaders.push(new URLRequestHeader("X-Error-Format", "XML"));
                        mapLoader.load(request);
                        dispatchEvent(new Event(LOAD_STARTED));
                }
 
-        private function errorOnMapLoad(event:Event):void {
-                       dispatchEvent(new MapEvent(MapEvent.ERROR, { message: "Couldn't load the map" } ));
-                       dispatchEvent(new Event(LOAD_COMPLETED));
+        private function errorOnMapLoad(event:Event, request:URLRequest):void {
+            var url:String = request.url + '?' + URLVariables(request.data).toString(); // for get reqeusts, at least
+            dispatchEvent(new MapEvent(MapEvent.ERROR, { message: "There was a problem loading the map data.\nPlease check your internet connection, or try zooming in.\n\n" + url } ));
+            dispatchEvent(new Event(LOAD_COMPLETED));
         }
+
         private function mapLoadStatus(event:HTTPStatusEvent):void {
-            trace("loading map status = "+event.status);
         }
 
         protected var appID:OAuthConsumer;
diff --git a/net/systemeD/halcyon/connection/bboxes/Box.as b/net/systemeD/halcyon/connection/bboxes/Box.as
new file mode 100755 (executable)
index 0000000..e4b1d99
--- /dev/null
@@ -0,0 +1,130 @@
+package net.systemeD.halcyon.connection.bboxes {
+       
+       public class Box {
+
+               public var x:Interval;
+               public var y:Interval;
+               
+               function Box():void {
+               }
+               
+               public function get left():Number   { return x._min; }
+               public function get right():Number  { return x._max; }
+               public function get bottom():Number { return y._min; }
+               public function get top():Number    { return y._max; }
+               
+               // Initialise from either a bbox or two Intervals
+
+               public function fromIntervals(x:Interval,y:Interval):Box {
+                       this.x=x; this.y=y;
+                       return this;
+               }
+               public function fromBbox(minx:Number,miny:Number,maxx:Number,maxy:Number):Box {
+                       x=new Interval(minx,maxx);
+                       y=new Interval(miny,maxy);
+                       return this;
+               }
+               
+               // If this box has any area, whether it contains a valid amount of space.
+
+               public function get valid():Boolean {
+                       return (x.valid && y.valid);
+               }
+
+               // Whether this box intersects another.
+
+               public function intersects(other:Box):Boolean {
+                       return (x.intersects(other.x) && y.intersects(other.y));
+               }
+               
+               // Intersection. May return a box that isn't valid.
+               public function intersection(other:Box):Box {
+                       return (new Box().fromIntervals(x.intersection(other.x), y.intersection(other.y)));
+               }
+
+               // Union. Return a Box covering this Box and the other.
+               public function union(other:Box):Box {
+                       return (new Box().fromIntervals(x.union(other.x), y.union(other.y)));
+               }
+
+               // Inverse. Returns an array of 4 Boxes covering all space except for this box.
+               public function get inverse():Array {
+                       return [
+                               new Box().fromBbox(-Infinity, y._max,    Infinity, Infinity),
+                               new Box().fromBbox(-Infinity, y._min,    x._min,   y._max  ),
+                               new Box().fromBbox(x._max,    y._min,    Infinity, y._max  ),
+                               new Box().fromBbox(-Infinity, -Infinity, Infinity, y._min  )
+                       ];
+               }
+
+               // Subtraction. take the inverse of one bbox and intersect it with this one. returns an array of Boxes.
+               public function subtract(other:Box):Array {
+                       var inverses:Array=other.inverse;
+                       var results:Array=[];
+                       var candidate:Box;
+                       for each (var i:Box in inverses) {
+                               candidate=intersection(i);
+                               if (candidate.valid) results.push(candidate);
+                       }
+                       return results;
+               }
+
+               // Subtract all Boxes in given array. Resulting set of boxes will be disjoint.
+               public function subtractAll(others:Array):Array {
+                       var memo:Array=[this];
+                       for each (var other:Box in others) {
+                               var subtracted:Array=[];
+                               for each (var b:Box in memo) {
+                                       subtracted=subtracted.concat(b.subtract(other));
+                               }
+                               memo=subtracted;
+                       }
+                       // do we need to flatten memo here?
+                       return memo;
+               }
+
+               // Is this box directly adjacent to the other, with no gap in between?
+
+               public function adjacentTo(other:Box):Boolean {
+                       return (((x.equals(other.x)) && ((y._min == other.y._max) || (y._max == other.y._min))) ||
+                                       ((y.equals(other.y)) && ((x._min == other.x._max) || (x._max == other.x._min))));
+               }
+
+               // Does this box enclose another one entirely?
+               
+               public function encloses(other:Box):Boolean {
+                       return (x.contains(other.x._min) && x.contains(other.x._max) && 
+                               y.contains(other.y._min) && y.contains(other.x._max));
+               }
+
+               // Merge as many boxes as possible without increasing the total area of the set of boxes. This is done by
+               // identifying edges along which boxes are adjacent. Note that the input set must be disjoint.
+               //
+               // This is an O(n^2) algorithm, so it's going to be very slow on large numbers of boxes. There's 
+               // almost certainly a better algorithm out there to do the same thing in better time. but it's nice
+               // and simple.
+
+               public static function merge(boxes:Array):Array {
+                       if (boxes.length==0) return [];
+                       var first:Box=boxes.shift();
+                       var kept:Array=[];
+                       for each (var box:Box in boxes) {
+                               if (first.adjacentTo(box)) { first=first.union(box); }
+                               else kept.push(box);
+                       }
+                       return [first].concat(Box.merge(kept));
+               }
+
+               public function equals(other:Box):Boolean {
+                       return (x.equals(other.x) && y.equals(other.y));
+               }
+               
+               public function get size():Number {
+                       return (x.size*y.size);
+               }
+
+               public function toString():String {
+                       return ("Box["+x._min+","+y._min+","+x._max+","+y._max+"]");
+               }
+       }
+}
diff --git a/net/systemeD/halcyon/connection/bboxes/FetchSet.as b/net/systemeD/halcyon/connection/bboxes/FetchSet.as
new file mode 100644 (file)
index 0000000..b2a9297
--- /dev/null
@@ -0,0 +1,106 @@
+package net.systemeD.halcyon.connection.bboxes {
+       
+       public class FetchSet {
+
+               private var existing:Array;
+               private static const MAX_PARTITION_TRIALS:uint = 100;
+
+               function FetchSet():void {
+                       existing=[];
+               }
+
+               public function getBoxes(bbox:Box,maxBoxes:uint):Array {
+                       var bits:Array=Box.merge(bbox.subtractAll(existing));
+                       var toFetch:Array=optimalPart(maxBoxes,bits);
+                       return toFetch;
+               }
+               
+               public function add(bbox:Box):void {
+                       existing.push(bbox);
+                       existing=existing.filter(function(item:Box,i:uint,arr:Array):Boolean {
+                               return !bbox.encloses(item);
+                       });
+               }
+
+               public function get size():int {
+                       return existing.length;
+               }
+
+               private function rgString(prefix:Array, numSets:int, numElts:int, numTries:int):Array {
+                       if (numElts==0) return [prefix];
+                       var maxDigit:Number=Math.min(maxValue(prefix)+1,numSets-1);
+                       var result:Array=[];
+                       for (var digit:uint=0; digit<=maxDigit; digit++) {
+                               if (numTries>0) {
+                                       var rv:Array=rgString(prefix.concat([digit]),numSets,numElts-1,numTries);
+                                       numTries-=rv.length;
+                                       result=result.concat(rv);
+                               }
+                       }
+                       return result;
+               }
+
+               // select only the partitions of the set which have a certain size, or smaller
+
+               private function partsOfSize(n:int,set:Array):Array {
+                       if (set.length==0) { return []; }
+                       return (rgString([0], n, set.length-1, MAX_PARTITION_TRIALS).map(
+                               function(rgs:Array,index:uint,array:Array):* {
+                                       var ary:Array=[];
+                                       for (var j:uint=0; j<=maxValue(rgs); j++) ary.push([]);
+                                       for (var i:uint=0; i<rgs.length; i++) ary[rgs[i]].push(set[i]);
+                                       return ary;
+                               }));
+               }
+               
+               private function maxValue(a:Array):Number {
+                       var m:Number=Number.NEGATIVE_INFINITY;
+                       for each (var n:Number in a) m=Math.max(m,n);
+                       return m;
+               }
+
+               // find the optimal partition - the one which requests the smallest amount of extra space - 
+               // given the set p of partitions
+
+               private function optimalPart(n:int, set:Array):Array {
+                       var p:Array=partsOfSize(n,set);
+                       if (p.length==0) return [];
+                       var q:Array=p.sort(function(a:Array,b:Array):Number {
+                               var aw:Number = wasteSize(a, set);
+                               var bw:Number = wasteSize(b, set);
+                               if (aw < bw) return -1;
+                               else if (aw > bw) return 1;
+                               else return 0;
+                       });
+                       return unionPartitions(q[0]);
+               }
+
+               private function wasteSize(boxes:Array, set:Array):Number {
+                       var waste:Number = 0;
+                       unionPartitions(boxes).forEach(function(b:Box,index:int,array:Array):void {
+                               var included:Number = 0;
+                               set.forEach(function(s:Box,index:int,array:Array):void {
+                                       s = s.intersection(b);
+                                       if (s.valid) included += s.size;
+                               });
+                               waste += b.size - included;
+                       });
+                       return waste;
+               }
+
+               private function unionPartitions(a:Array):Array {
+                       return a.map(function(bs:Array,index:int,array:Array):Box {
+                               var box:Box = bs[0];
+                               bs.forEach(function(b:Box,index:int,array:Array):void {
+                                       box=box.union(b);
+                               });
+                               return box;
+                       });
+               }
+               
+               public function toString():String {
+                       return "["+existing.join(",")+"]";
+               }
+
+       }
+}
diff --git a/net/systemeD/halcyon/connection/bboxes/Interval.as b/net/systemeD/halcyon/connection/bboxes/Interval.as
new file mode 100755 (executable)
index 0000000..3d54e4c
--- /dev/null
@@ -0,0 +1,68 @@
+package net.systemeD.halcyon.connection.bboxes {
+       
+       public class Interval {
+
+               public var _min:Number;
+               public var _max:Number;
+               
+               function Interval(min:Number,max:Number):void {
+                       _min=min;
+                       _max=max;
+               }
+
+               public function contains(x:Number):Boolean { return (x>=_min && x<_max); }
+               public function get valid():Boolean { return (_max>_min); }
+               public function get size():Number { return (_max-_min); }
+
+               public function intersects(other:Interval):Boolean { return (_max>other._min && _min<other._max); }
+               public function equals(other:Interval):Boolean { return (_min==other._min && _max==other._max); }
+               public function union(other:Interval):Interval { return new Interval(Math.min(_min,other._min), Math.max(_max,other._max)); }
+               public function intersection(other:Interval):Interval { return new Interval(Math.max(_min,other._min), Math.min(_max,other._max)); }
+               
+               public function toString():String { return ("Interval["+_min+","+_max+"]"); }
+
+               // Merge an array of possibly overlapping intervals into a set of disjoint intervals.
+               public static function merge(intervals:Array):Array {
+                       intervals.sort(compareMinimum);
+                       var memo:Array=[];
+                       for each (var elem:Interval in intervals) {
+                               var last:Interval=memo.pop();
+                               if (!last) { 
+                                       memo=[elem];
+                               } else if (last.intersects(elem)) {
+                                       memo.push(last.union(elem));
+                               } else {
+                                       memo.push(last);
+                                       memo.push(elem);
+                               }
+                       }
+                       return memo;
+               }
+
+               // Returns the largest empty interval in the given set of intervals.
+               
+               public static function largestEmpty(intervals:Array):Interval {
+                       var gaps:Array=[];
+                       intervals=merge(intervals);
+                       for (var i:uint=0; i<=intervals.length-2; i++) {
+                               gaps.push(new Interval(intervals[i]._max, intervals[i+1]._min));
+                       }
+                       gaps.sort(compareSize);
+                       return gaps[gaps.length-1];
+               }
+
+               // Comparison methods for sorting
+
+               private static function compareMinimum(a:Interval, b:Interval):int {
+                       if (a._min>b._min) { return 1; }
+                       if (a._min<b._min) { return -1; }
+                       return 0;
+               }
+
+               private static function compareSize(a:Interval, b:Interval):int {
+                       if (a.size>b.size) { return 1; }
+                       if (a.size<b.size) { return -1; }
+                       return 0;
+               }
+       }
+}
diff --git a/net/systemeD/halcyon/styleparser/CSSTransform.as b/net/systemeD/halcyon/styleparser/CSSTransform.as
new file mode 100644 (file)
index 0000000..27a7747
--- /dev/null
@@ -0,0 +1,35 @@
+package net.systemeD.halcyon.styleparser {
+
+       import flash.net.*;
+    import flash.events.*;
+       import net.systemeD.halcyon.connection.Entity;
+
+    public class CSSTransform {
+
+               private static const GLOBAL_INSTANCE:CSSTransform = new CSSTransform();
+               public static function getInstance():CSSTransform { return GLOBAL_INSTANCE; }
+
+               [Bindable] public var url:String='';
+               private var ruleset:RuleSet;
+               
+               public function loadFromUrl(filename:String):void {
+                       url=filename;
+                       ruleset=new RuleSet(0,30,cssReady);
+                       ruleset.loadFromCSS(url);
+               }
+
+               public function clear():void {
+                       ruleset=null;
+                       url='';
+               }
+
+               private function cssReady():void {
+               }
+               
+               public function run(entity:Entity,tags:Object):Object {
+                       if (ruleset) return ruleset.runInstructions(entity,tags);
+                       return tags;
+               }
+
+       }
+}
index 1dec03ed089c09b4e9f93613124b1e891ddfb446..82d5c79a79a8a2c6c86ce431a9507a5b5e5382a0 100644 (file)
@@ -2,15 +2,28 @@ package net.systemeD.halcyon.styleparser {
 
        public class InstructionStyle extends Style {
 
-               public var set_tags:Object;
+               public var set_tags:Object={};
                public var breaker:Boolean=false;
+               public var set_tags_order:Array=[];
 
                public function addSetTag(k:String,v:*):void {
+                       if (v is Eval) { evals[k]=v; }
+                       else if (v is TagValue) { tagvalues[k]=v; }
+                       
                        edited=true;
-                       if (!set_tags) { set_tags=new Object(); }
+                       set_tags_order.push(k);
                        set_tags[k]=v;
                }
 
+               public function assignSetTags(tags:Object):void {
+                       for (var i:uint=0; i<set_tags_order.length; i++) {
+                               var k:String=set_tags_order[i];
+                               var v:*=set_tags[k];
+                               if (v is TagValue) { v=v.getValue(tags); }
+                               if (v=='') { delete tags[k]; }
+                               else { tags[k]=v; }
+                       }
+               }
        }
 
 }
index 9c16687e3c322284f7e10ddc594575f03990bf54..6a8d6a015fef1dda52b38a08015078c7a0bf23f5 100644 (file)
@@ -9,13 +9,15 @@ package net.systemeD.halcyon.styleparser {
     import net.systemeD.halcyon.ImageBank;
 
     import net.systemeD.halcyon.connection.*;
-       
-       /** A complete stylesheet, as loaded from a MapCSS file. It contains all selectors, declarations, 
-               and embedded images.                                                                                                                                                            </p><p>
-               
-               The RuleSet class has two principal methods: getStyles, which calculates the styles that apply
-               to an entity (returned as a StyleList); and parse, which parses a MapCSS stylesheet into
-               a complete RuleSet. */
+
+    /**
+    * A complete stylesheet, as loaded from a MapCSS file. It contains all selectors, declarations,
+    * and embedded images.
+    *
+    * <p>The RuleSet class has two principal methods: getStyles, which calculates the styles that apply
+    * to an entity (returned as a StyleList); and parse, which parses a MapCSS stylesheet into
+    * a complete RuleSet.</p>
+    */
 
        public class RuleSet {
 
@@ -59,12 +61,15 @@ package net.systemeD.halcyon.styleparser {
                private static const CONDITION_LE:RegExp        =/^ \s* ([:\w]+) \s* <= \s* (.+) \s* $/sx;
                private static const CONDITION_REGEX:RegExp     =/^ \s* ([:\w]+) \s* =~\/ \s* (.+) \/ \s* $/sx;
 
-               private static const ASSIGNMENT_EVAL:RegExp     =/^ \s* (\S+) \s* \:      \s* eval \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
-               private static const ASSIGNMENT:RegExp          =/^ \s* (\S+) \s* \:      \s*          (.+?) \s*                   $/sx;
-               private static const SET_TAG_EVAL:RegExp        =/^ \s* set \s+(\S+)\s* = \s* eval \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
-               private static const SET_TAG:RegExp                     =/^ \s* set \s+(\S+)\s* = \s*          (.+?) \s*                   $/isx;
-               private static const SET_TAG_TRUE:RegExp        =/^ \s* set \s+(\S+)\s* $/isx;
-               private static const EXIT:RegExp                        =/^ \s* exit \s* $/isx;
+               private static const ASSIGNMENT_EVAL:RegExp             =/^ \s* (\S+) \s* \:      \s* eval \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
+               private static const ASSIGNMENT_TAGVALUE:RegExp =/^ \s* (\S+) \s* \:      \s* tag  \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
+               private static const ASSIGNMENT:RegExp                  =/^ \s* (\S+) \s* \:      \s*          (.+?) \s*                   $/sx;
+               private static const SET_TAG_EVAL:RegExp                =/^ \s* set \s+(\S+)\s* = \s* eval \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
+               private static const SET_TAG_TAGVALUE:RegExp    =/^ \s* set \s+(\S+)\s* = \s* tag  \s* \( \s* ' (.+?) ' \s* \) \s* $/isx;
+               private static const SET_TAG:RegExp                             =/^ \s* set \s+(\S+)\s* = \s*          (.+?) \s*                   $/isx;
+               private static const SET_TAG_TRUE:RegExp                =/^ \s* set \s+(\S+)\s* $/isx;
+               private static const DELETE_TAG:RegExp                  =/^ \s* delete \s+(\S+)\s* $/isx;
+               private static const EXIT:RegExp                                =/^ \s* exit \s* $/isx;
 
                private static const oZOOM:uint=2;
                private static const oGROUP:uint=3;
@@ -250,6 +255,14 @@ package net.systemeD.halcyon.styleparser {
                        return sl;
                }
 
+               /** Run instruction styles only, for CSSTransform. */
+               public function runInstructions(obj:Entity, tags:Object):Object {
+                       for each (var sc:StyleChooser in choosers) {
+                               tags=sc.runInstructions(obj,tags);
+                       }
+                       return tags;
+               }
+
                // ---------------------------------------------------------------------------------------------------------
                // Loading stylesheet
 
@@ -430,11 +443,14 @@ package net.systemeD.halcyon.styleparser {
                        var xs:InstructionStyle=new InstructionStyle(); 
 
                        for each (a in s.split(';')) {
-                               if ((o=ASSIGNMENT_EVAL.exec(a)))   { t[o[1].replace(DASH,'_')]=saveEval(o[2]); }
-                               else if ((o=ASSIGNMENT.exec(a)))   { t[o[1].replace(DASH,'_')]=o[2]; }
-                               else if ((o=SET_TAG_EVAL.exec(a))) { xs.addSetTag(o[1],saveEval(o[2])); }
-                               else if ((o=SET_TAG.exec(a)))      { xs.addSetTag(o[1],o[2]); }
-                               else if ((o=SET_TAG_TRUE.exec(a))) { xs.addSetTag(o[1],true); }
+                               if      ((o=ASSIGNMENT_EVAL.exec(a)))           { t[o[1].replace(DASH,'_')]=saveEval(o[2]); }
+                               else if ((o=ASSIGNMENT_TAGVALUE.exec(a)))       { t[o[1].replace(DASH,'_')]=new TagValue(o[2]); }
+                               else if ((o=ASSIGNMENT.exec(a)))                        { t[o[1].replace(DASH,'_')]=o[2]; }
+                               else if ((o=SET_TAG_EVAL.exec(a)))                      { xs.addSetTag(o[1],saveEval(o[2])); }
+                               else if ((o=SET_TAG_TAGVALUE.exec(a)))          { xs.addSetTag(o[1],new TagValue(o[2])); }
+                               else if ((o=SET_TAG.exec(a)))                           { xs.addSetTag(o[1],o[2]); }
+                               else if ((o=SET_TAG_TRUE.exec(a)))                      { xs.addSetTag(o[1],true); }
+                               else if ((o=DELETE_TAG.exec(a)))                        { xs.addSetTag(o[1],''); }
                                else if ((o=EXIT.exec(a))) { xs.setPropertyFromString('breaker',true); }
                        }
 
@@ -517,7 +533,7 @@ package net.systemeD.halcyon.styleparser {
 
         public static function parseCSSColor(colorStr:String):uint {
             colorStr = colorStr.toLowerCase();
-            if (CSSCOLORS[colorStr]) {
+            if (CSSCOLORS[colorStr] != undefined) {
                 return CSSCOLORS[colorStr];
             } else {
                 var match:Object = HEX.exec(colorStr);
index 7ee5b0033782727ddf8676a080b427d92fcbe48b..a28ece13fb4f79e189a9172b6fda573d2185d029 100644 (file)
@@ -34,6 +34,9 @@ package net.systemeD.halcyon.styleparser {
                /** Compiled SWFs for each eval. We keep it here, not in the property itself, so that we can retain typing for each property. */
                public var evals:Object={};
                
+               /** TagValue assignments, e.g. { width: tag('lanes'); } */
+               public var tagvalues:Object={};
+               
                /** Make an exact copy of an object.
                        Used when merging cascading styles. (FIXME: this needs some benchmarking - it may be quicker to simply iterate over .properties, 
                        copying each one. */
@@ -53,7 +56,7 @@ package net.systemeD.halcyon.styleparser {
                public function mergeWith(additional:Style):void {
                        for each (var prop:String in properties) {
                                // Note extra check for empty arrays, which we use to mean 'undefined' (see setPropertyFromString below)
-                               if (additional[prop] && !((additional[prop] is Array) && additional[prop].length==0)) {
+                               if (additional[prop] != undefined && !((additional[prop] is Array) && additional[prop].length==0)) {
                                        this[prop]=additional[prop];
                                }
                        }
@@ -70,7 +73,7 @@ package net.systemeD.halcyon.styleparser {
                        return false;
                }
                
-               /** Are there any eval functions defined? */
+               /** Are there any eval functions defined? (This isn't used.) */
                public function hasEvals():Boolean {
                        for (var k:String in evals) { return true; }
                        return false;
@@ -79,16 +82,14 @@ package net.systemeD.halcyon.styleparser {
                /** Run all evals for this Style over the supplied tags.
                        If, for example, the stylesheet contains width=eval('_width+2'), then this will set Style.width to 7. */
                public function runEvals(tags:Object):void {
-                       for (var k:String in evals) {
-                               // ** Do we need to do typing here?
-                               this[k]=evals[k].exec(tags);
-                       }
+                       for (var k:String in evals) this[k]=evals[k].exec(tags);
                }
-
+               
                /** Set a property, casting as correct type. */
                public function setPropertyFromString(k:String,v:*):Boolean {
                        if (!this.hasOwnProperty(k)) { return false; }
                        if (v is Eval) { evals[k]=v; v=1; }
+                       else if (v is TagValue) { tagvalues[k]=v; v=1; }
 
                        // Arrays don't return a proper typeof, so check manually
                        // Note that undefined class variables always have typeof=object,
@@ -117,6 +118,7 @@ package net.systemeD.halcyon.styleparser {
             for each (var k:String in this.properties) {
                                if (this.hasOwnProperty(k)) { str+=k+"="+this[k]+"; "; }
                        }
+                       for each (k in tagvalues) str+=k+";"; 
                        return str;
         }
        }
index fdefa232e33c38cda313a7dadf0412c3055e0bee..9d9d2f93fc4648a94287b5f8d3582eafedb6ff83 100644 (file)
@@ -52,7 +52,8 @@ package net.systemeD.halcyon.styleparser {
                                        sl.addSubpart(c.subpart);
 
                                        // Update StyleList
-                                       for each (var r:Style in styles) {
+                                       for (var i:uint=0; i<styles.length; i++) {
+                                               var r:Style=styles[i];
                                                var a:Object;
                                                if (r is ShapeStyle) {
                                                        a=sl.shapeStyles;
@@ -73,9 +74,7 @@ package net.systemeD.halcyon.styleparser {
                                                        if (w>sl.maxwidth) { sl.maxwidth=w; }
                                                } else if (r is InstructionStyle) {
                                                        if (InstructionStyle(r).breaker) { return; }
-                                                       if (InstructionStyle(r).set_tags) {
-                                                               for (var k:String in InstructionStyle(r).set_tags) { tags[k]=InstructionStyle(r).set_tags[k]; }
-                                                       }
+                                                       InstructionStyle(r).assignSetTags(tags);
                                                        continue;
                                                }
                                                if (r.drawn) { tags[':drawn']='yes'; }
@@ -96,6 +95,24 @@ package net.systemeD.halcyon.styleparser {
                        }
                }
                
+               /** Cut-down version of updateStyles that runs InstructionStyles only - for CSSTransform usage. */
+
+               public function runInstructions(obj:Entity, tags:Object):Object {
+                       for each (var c:RuleChain in ruleChains) {
+                               if (c.test(-1,obj,tags,10)) {
+                                       for (var i:uint=0; i<styles.length; i++) {
+                                               var r:Style=styles[i];
+                                               if (r is InstructionStyle) {
+                                                       if (InstructionStyle(r).breaker) { return tags; }
+                                                       InstructionStyle(r).assignSetTags(tags);
+                                               }
+                                               r.runEvals(tags);
+                                       }
+                               }
+                       }
+                       return tags;
+               }
+               
                
                // ---------------------------------------------------------------------------------------------
                // Methods to add properties (used by parsers such as MapCSS)
diff --git a/net/systemeD/halcyon/styleparser/TagValue.as b/net/systemeD/halcyon/styleparser/TagValue.as
new file mode 100644 (file)
index 0000000..06cc583
--- /dev/null
@@ -0,0 +1,33 @@
+package net.systemeD.halcyon.styleparser {
+
+       /*
+               === TagValue ===
+
+               This is a custom declaration value that means 'use the value of this tag'.
+               In other words,
+                       { set ref=tag('dftnumber'); }
+               parses to
+                       TagValue('dftnumber')
+               and returns the value of the dftnumber tag.
+               
+               There isn't really any logic contained within this class, it's just here 
+               so that we can store it as a custom property within Styles (like Eval).
+
+       */
+
+       public class TagValue {
+               private var key:String;
+
+               public function TagValue(k:String) {
+                       key=k;
+               }
+
+               public function getValue(tags:Object):String {
+                       return tags[key];
+               }
+               
+               public function toString():String {
+                       return "TagValue("+key+")";
+               }
+       }
+}
index 78d4b91ac0ad085dfa28645b9bb5e54b9c4ef32d..4b339d0e115b70c3519d5eb60ab3ece6ba48397c 100644 (file)
@@ -18,7 +18,7 @@
        </mx:HBox>
 
        <mx:HBox>
-       <mx:Button label="Edit..." click="FlexGlobals.topLevelApplication.bgButton.close(); new BackgroundDialog().init('Background imagery',background,Imagery.instance());" />
+       <mx:Button id="editLabel" label="Edit..." click="FlexGlobals.topLevelApplication.bgButton.close(); new BackgroundDialog().init('Background imagery',background,Imagery.instance());" />
        <mx:Button label="Vector file..." click="FlexGlobals.topLevelApplication.bgButton.close(); new VectorSourceDialog().init();" />
        </mx:HBox>
 
index 184f70a41fe75711f28cfda2620b1454f6500bf6..f70cc2171d35e525879fb3522bff393d3bda4288 100644 (file)
@@ -11,7 +11,10 @@ package net.systemeD.potlatch2 {
     import flash.external.ExternalInterface;
     import flash.events.*;
        import flash.geom.*;
+       import flash.display.*;
        import flash.ui.Keyboard;
+       import flash.ui.Mouse;
+       import flash.ui.MouseCursorData;
        import flash.text.TextField;
     import mx.controls.TextArea;
 
@@ -64,6 +67,12 @@ package net.systemeD.potlatch2 {
             if (this.moveFunction) {
                 map.addEventListener(MapEvent.MOVE, moveHandler);
             }
+
+                       createBitmapCursor("pen"     ,new pen());
+                       createBitmapCursor("pen_x"   ,new pen_x());
+                       createBitmapCursor("pen_o"   ,new pen_o());
+                       createBitmapCursor("pen_so"  ,new pen_so());
+                       createBitmapCursor("pen_plus",new pen_plus());
         }
 
         public function setActive():void {
@@ -178,9 +187,18 @@ package net.systemeD.potlatch2 {
                }
 
                /** Set a mouse pointer. */
-               public function setCursor(cursor:Class):void {
-                       CursorManager.removeAllCursors();
-                       if (cursor && cursorsEnabled) { CursorManager.setCursor(cursor,2,-4,0); }
+               public function setCursor(name:String=""):void {
+                       if (name && cursorsEnabled) { Mouse.cursor=name; }
+                       else { Mouse.cursor=flash.ui.MouseCursor.AUTO; }
+               }
+
+               private function createBitmapCursor(name:String, source:Bitmap, hotX:int=4, hotY:int=0):void {
+                       var bitmapVector:Vector.<BitmapData> = new Vector.<BitmapData>(1, true);
+                       bitmapVector[0] = source.bitmapData;
+                       var cursorData:MouseCursorData = new MouseCursorData();
+                       cursorData.hotSpot = new Point(hotX,hotY);
+                       cursorData.data = bitmapVector;
+                       Mouse.registerCursor(name, cursorData);
                }
 
         private function toggleSize():void {
index 7ac5c6bb42cb6243bb437f5aca6d5cd988c14e87..057e6f817730232910f6ef0b85d1e6f134f9dd7c 100644 (file)
@@ -11,7 +11,7 @@
                dataProvider="{Stylesheets.instance().getCollection()}"
                rowCount="{Stylesheets.instance().getCollection().length}" />
 
-       <mx:Button label="Edit..." click="FlexGlobals.topLevelApplication.styleButton.close(); new BackgroundDialog().init('Map style',mapStyle,Stylesheets.instance());" />
+       <mx:Button id="editButton" label="Edit..." click="FlexGlobals.topLevelApplication.styleButton.close(); new BackgroundDialog().init('Map style',mapStyle,Stylesheets.instance());" />
 
        <fx:Script><![CDATA[
                import net.systemeD.halcyon.*;
index 8d4f7fb36b4e7517a2689fc26b8f20d53ed219d0..693bc6569cc53801775f2228a658517d1c946667 100644 (file)
@@ -1,4 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!---
+  The TagViewer is the container for the entire sidebar. It has a number of components, and subpanels, in a ViewStack that change
+  depending on what is selected, i.e. the ControllerState.
+
+  @see net.systemeD.potlatch2.controller.ControllerState
+    -->
 <mx:VBox
     xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:mx="library://ns.adobe.com/flex/mx"
@@ -32,6 +38,8 @@
                                                        import mx.core.DragSource;
 
                                                        private function dragPOI(event:MouseEvent, tags:Array):void {
+                                                               if (outerDocument.controller.map.dragstate==outerDocument.controller.map.DRAGGING) return;
+
                                                                // Get the drag initiator component from the event object.
                                                                var dragInitiator:Image = event.currentTarget as Image;
                                                                var dragSource:DragSource = new DragSource();
               markerPanelContents.init(selectedEntity, layer);
               sidebar.selectedChild = markerPanel;
             } else if (connection is SnapshotConnection) {
-              backgroundPanelContents.init(selectedEntity, layer);
+              backgroundPanelContents.init(selectedEntity);
               sidebar.selectedChild = backgroundPanel;
             } else {
               refreshFeatureIcon();
                        if      ( entity is Node     ) entityText = "Node";
                        else if ( entity is Way      ) entityText = "Way";
                        else if ( entity is Relation ) entityText = "Relation";
-                       advancedID.htmlText = entityText+": <b>"+entity.id+"</b>";
+                       advancedID.htmlText = entityText+": <b>"+entity.id+"</b> "+(entity.status ? entity.status : '');
                }
 
                removeRelationListeners();
       }
 
          public function addNewTag():void {
-               if (stack.selectedChild!=advancedContainer) { return; }
-               advancedTagGrid.addNewTag();
+               if (sidebar.selectedChild==multiplePanel) { multiAdvancedTagGrid.addNewTag(); }
+               else if (stack.selectedChild==advancedContainer) { advancedTagGrid.addNewTag(); }
          }
 
       private function addedToRelation(event:RelationMemberEvent):void {
index 90133108e1c89306c103793dc6f92603049fddf5..5f49e1042bf228653404cb851e4605f5549ad78c 100644 (file)
@@ -4,7 +4,7 @@
         xmlns:mx="library://ns.adobe.com/flex/mx"
         layout="vertical" showCloseButton="true"
         horizontalAlign="center" title="Load vector file"
-        width="500" height="350" verticalGap="0">
+        width="500" height="450" verticalGap="0">
 
        <mx:DataGrid editable="true" width="100%" height="100%" id="dataGrid" 
                dataProvider="{vectorLayers}" itemEditEnd="dataEdited(event)">
@@ -50,7 +50,9 @@
        </mx:HBox>
 
        <mx:VBox width="100%" paddingTop="10">
-               <mx:Label htmlText="&lt;b&gt;Add new vector layer&lt;/b&gt;" />
+               <mx:HRule width="100%" />
+               <!-- ** FIXME: this looks horrid - make into a nicely laid out form -->
+               <mx:Label text="Add new vector layer" fontSize="12" fontWeight="bold" />
                <mx:HBox>
                        <mx:RadioButtonGroup id="filetype" />
                        <mx:RadioButton width="100%" groupName="filetype" value="gpx" id="gpx" label="GPX" selected="true" />
                                        <fx:Object label="NAD83" data="EPSG:4269" />
                                </mx:ArrayCollection>
                        </mx:ComboBox>
-                       <mx:CheckBox width="100%" label="Simplify paths" selected="true" id="simplify" />
+                       <mx:CheckBox width="100%" label="Simplify paths" id="simplify" />
                </mx:HBox>
                <mx:HBox>
                        <mx:Text text="URL:"/>
                        <mx:TextInput width="100%" id="src" text="" change="selectByExtension()" />
                        <mx:Button label="Load" click="loadFiles(src.text, filetype.selectedValue.toString(), simplify.selected, projection.selectedItem.data);" enabled="{src.text == '' ? false : true}"/>
                </mx:HBox>
+               <mx:HBox>
+                       <mx:Text text="Tag transform:"/>
+                       <mx:TextInput width="100%" id="transformsrc" text="{CSSTransform.getInstance().url}"/>
+                       <mx:Button label="Load" click="loadTransform(transformsrc.text);" enabled="{transformsrc.text == '' ? false : true}"/>
+                       <mx:Button label="Clear" click="clearTransform();" enabled="{transformsrc.text == '' ? false : true}"/>
+               </mx:HBox>
        </mx:VBox>
 
   <fx:Script><![CDATA[
        import net.systemeD.halcyon.MapPaint;
        import net.systemeD.halcyon.Globals;
        import net.systemeD.halcyon.connection.Connection;
-       import net.systemeD.potlatch2.utils.Importer;
-       import net.systemeD.potlatch2.utils.GpxImporter;
-       import net.systemeD.potlatch2.utils.KmlImporter;
-       import net.systemeD.potlatch2.utils.ShpImporter;
-       import net.systemeD.potlatch2.utils.OsmImporter;
+       import net.systemeD.halcyon.styleparser.CSSTransform;
+       import net.systemeD.potlatch2.utils.*;
        import net.systemeD.potlatch2.collections.Stylesheets;
     import mx.managers.PopUpManager;
     import mx.events.DataGridEvent;
                var stylesheet:String="stylesheets/potlatch.css";
                if (type=='gpx') { stylesheet="stylesheets/gpx.css"; }
 
-               var connection:Connection = new Connection(name, url, null, null);
+               var connection:Connection = new Connection(name, url, null, null, CSSTransform.getInstance());
 
-                var filesLoaded:Function = function(success:Boolean,message:String=null):void {
-                        if (success) {
-                            var paint:MapPaint = map.addLayer(connection, stylesheet);
-                            paint.updateEntityUIs(false, false);
-                            dispatchEvent(new Event("layers_changed"));
-                        } else {
-                            Alert.show(message, 'Error', mx.controls.Alert.OK);
-                        }
-                }
+               var filesLoaded:Function = function(success:Boolean,message:String=null):void {
+                       if (success) {
+                               var paint:MapPaint = map.addLayer(connection, stylesheet);
+                               paint.updateEntityUIs(false, false);
+                               dispatchEvent(new Event("layers_changed"));
+                       } else {
+                               Alert.show(message, 'Error', mx.controls.Alert.OK);
+                       }
+               }
 
                if (type=='gpx') {
                        var gpx:GpxImporter=new GpxImporter(connection, map, [url], filesLoaded, simplify);
                                                            [url+".shp",url+".shx",url+".dbf"], filesLoaded, simplify, projection);
                }
        }
+       
+       private function loadTransform(url:String):void {
+               CSSTransform.getInstance().loadFromUrl(url);
+       }
+       private function clearTransform():void {
+               CSSTransform.getInstance().clear();
+       }
 
               ]]>
   </fx:Script>
index 27f3b56754e5baeff5e5e6c1dc798fc596b24cbc..2ef4fb3384bc8415345b42f754db3b42094e98fc 100644 (file)
@@ -75,6 +75,7 @@ package net.systemeD.potlatch2.controller {
                protected function sharedKeyboardEvents(event:KeyboardEvent):ControllerState {
                        var editableLayer:MapPaint=controller.map.editableLayer;                                                                // shorthand for this method
                        switch (event.keyCode) {
+                               case 48:        removeTags(); break;                                                                                                    // 0 - remove all tags
                                case 66:        setSourceTag(); break;                                                                                                  // B - set source tag for current object
                                case 67:        editableLayer.connection.closeChangeset(); break;                                               // C - close changeset
                                case 68:        editableLayer.alpha=1.3-editableLayer.alpha; return null;                               // D - dim
@@ -110,12 +111,13 @@ package net.systemeD.potlatch2.controller {
                        if ( paint && paint.isBackground ) {
                                if (event.type == MouseEvent.MOUSE_DOWN && ((event.shiftKey && event.ctrlKey) || event.altKey) ) {
                                        // alt-click to pull data out of vector background layer
-                                       // first, create a list of the alt-clicked item, plus anything else already selected (assuming it's in the same layer!)
+                                       // extend the current selection (alt-ctrl) or create a new one (alt)?
+                                       var newSelection:Array=(event.altKey && event.ctrlKey) ? _selection : [];
+                                       // create a list of the alt-clicked item, plus anything else already selected (assuming it's in the same layer!)
                                        var itemsToPullThrough:Array=[]
                                        if (_selection.length && firstSelected.connection==entity.connection) itemsToPullThrough=_selection.slice();
                                        if (itemsToPullThrough.indexOf(entity)==-1) itemsToPullThrough.push(entity);
                                        // make sure they're unhighlighted, and pull them through
-                                       var newSelection:Array=[]
                                        for each (var entity:Entity in itemsToPullThrough) {
                                                paint.setHighlight(entity, { hover:false, selected: false });
                                                if (entity is Way) paint.setHighlightOnNodes(Way(entity), { selectedway: false });
@@ -200,6 +202,20 @@ package net.systemeD.potlatch2.controller {
 
 
                }
+               
+               /** Remove all tags from current selection. */
+               protected function removeTags():void {
+                       if (selectCount==0) return;
+                       var undo:CompositeUndoableAction = new CompositeUndoableAction("Remove tags");
+                       for each (var item:Entity in _selection) {
+                               item.suspend();
+                               var tags:Array=item.getTagArray();
+                               for each (var tag:Tag in tags) item.setTag(tag.key,null,undo.push);
+                       }
+                       MainUndoStack.getGlobalStack().addAction(undo);
+                       controller.updateSelectionUI();
+                       for each (item in _selection) item.resume();
+               }
 
                /** Create an action to add "source=*" tag to current entity based on background imagery. This is a convenient shorthand for users. */
                protected function setSourceTag():void {
index 08b11d0b6382033d9a049d311bf5fc1e75b9f7c4..0101db37570e16d7c3abf331c11448e5bbf9fef9 100644 (file)
@@ -130,12 +130,12 @@ package net.systemeD.potlatch2.controller {
                                // set cursor depending on whether we're floating over the start of this way, 
                                // another random node, a possible junction...
                                if (entity is Node && focus is Way && Way(focus).endsWith(Node(entity))) {
-                                       if (focus==firstSelected) { controller.setCursor(controller.pen_so); }
-                                                            else { controller.setCursor(controller.pen_o); }
+                                       if (focus==firstSelected) { controller.setCursor("pen_so"); }
+                                                            else { controller.setCursor("pen_o"); }
                                } else if (entity is Node) {
-                                       controller.setCursor(controller.pen_x);
+                                       controller.setCursor("pen_x");
                                } else {
-                                       controller.setCursor(controller.pen_plus);
+                                       controller.setCursor("pen_plus");
                                }
                        } else if ( event.type == MouseEvent.MOUSE_OUT && !isBackground ) {
                                if (focus is Way && entity!=firstSelected) {
@@ -144,7 +144,7 @@ package net.systemeD.potlatch2.controller {
                                        // ** We could do with an optional way of calling WayUI.redraw to only do the nodes, which would be a
                                        // useful optimisation.
                                }
-                               controller.setCursor(controller.pen);
+                               controller.setCursor("pen");
                        }
 
                        return this;
@@ -341,14 +341,14 @@ package net.systemeD.potlatch2.controller {
                        var node:Node = Way(firstSelected).getNode(editEnd ? Way(firstSelected).length-1 : 0);
                        var start:Point = new Point(node.lon, node.latp);
                        elastic = new Elastic(controller.map, start, start);
-                       controller.setCursor(controller.pen);
+                       controller.setCursor("pen");
                }
                override public function exitState(newState:ControllerState):void {
             Way(firstSelected).removeEventListener(Connection.WAY_NODE_REMOVED, fixElastic);
             Way(firstSelected).removeEventListener(Connection.WAY_NODE_ADDED, fixElastic);
 
                        super.exitState(newState);
-                       controller.setCursor(null);
+                       controller.setCursor();
                        elastic.removeSprites();
                        elastic = null;
                }
index b780bd25be499df22a86dc93429decf12204aeee..873ddb8a2fc3d7427dfc907bd0c68c78f0b9014f 100644 (file)
@@ -23,7 +23,7 @@ package net.systemeD.potlatch2.controller {
                        var paint:MapPaint = getMapPaint(DisplayObject(event.target));
                        var focus:Entity = getTopLevelFocusEntity(entity);
 
-                       if (event.type==MouseEvent.MOUSE_UP && (focus==null || (paint && paint.isBackground)) && map.dragstate!=map.DRAGGING) {
+                       if (event.type==MouseEvent.MOUSE_UP && (focus==null || (paint && paint.isBackground)) && map.dragstate!=map.DRAGGING && map.dragstate!=map.SWALLOW_MOUSEUP) {
                                map.dragstate=map.NOT_DRAGGING;
                                // ** FIXME: BeginWayAction ought to be a discrete class
                                var undo:CompositeUndoableAction = new BeginWayAction();
index f78d0d3f5941e248f33c2fb2d505d968633eac0b..939ddb8124e1e2f712fb56548bea05470a4e63ee 100644 (file)
@@ -18,7 +18,7 @@ package net.systemeD.potlatch2.controller {
                        if (event.type==MouseEvent.MOUSE_MOVE || event.type==MouseEvent.ROLL_OVER || event.type==MouseEvent.MOUSE_OUT) { return this; }
                        var focus:Entity = getTopLevelFocusEntity(entity);
 
-                       if ( event.type == MouseEvent.MOUSE_DOWN && entity && event.ctrlKey ) {
+                       if ( event.type == MouseEvent.MOUSE_DOWN && entity && event.ctrlKey && !event.altKey ) {
                                // modify selection
                                layer.setHighlight(entity, { selected: toggleSelection(entity) });
                                controller.updateSelectionUI();
index b3279501b6e09cf4ac9a99cd131e766c81f02218..8ffbf31cc4d9e0a35ff273411be53d057b81c46a 100644 (file)
@@ -37,7 +37,7 @@ package net.systemeD.potlatch2.controller {
                        if (event.type==MouseEvent.MOUSE_MOVE) { return this; }
                        var paint:MapPaint = getMapPaint(DisplayObject(event.target));
 
-                       if (event.type==MouseEvent.MOUSE_DOWN && event.ctrlKey && entity && entity!=firstSelected && paint==layer) {
+                       if (event.type==MouseEvent.MOUSE_DOWN && event.ctrlKey && !event.altKey && entity && entity!=firstSelected && paint==layer) {
                                return new SelectedMultiple([firstSelected,entity],layer);
                        } else if (event.type==MouseEvent.MOUSE_DOWN && event.shiftKey && !entity && !layer.isBackground) {
                                return new DrawQuadrilateral(firstSelected as Node);
index d23c28df432f69f28ad5c5ed95290c9b62d1186b..05bae453abbcaad36429a9147876b5dc326c0e01 100644 (file)
@@ -58,7 +58,7 @@ package net.systemeD.potlatch2.controller {
                 var d:DragWayNode=new DragWayNode(firstSelected as Way, -1, event, true);
                                d.forceDragStart();
                                return d;
-                       } else if ( event.type == MouseEvent.MOUSE_DOWN && event.ctrlKey && entity && entity!=firstSelected) {
+                       } else if ( event.type == MouseEvent.MOUSE_DOWN && event.ctrlKey && !event.altKey && entity && entity!=firstSelected) {
                                // multiple selection
                                return new SelectedMultiple([firstSelected,entity],layer);
                        } else if ( event.type == MouseEvent.MOUSE_UP && focus==firstSelected ) {
index 45f2972e9c305f6368a93b80fca668f69f31d284..432b9e07f4f1a9cd20a67e5ebc7c6607779cfe3c 100644 (file)
     import mx.events.CloseEvent;
     import mx.core.Application;
     import mx.core.FlexGlobals;
+    import net.systemeD.halcyon.Globals;
 
        [Bindable] private var application:Object = FlexGlobals.topLevelApplication;
+       [Bindable] private var locale:String = Globals.vars.locale;
 
     /** Pops up a multi-tabbed help window in the middle of the screen, then remembers that the user has seen it. */
     public function init():void {
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="whyOpenStreetMap" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p><b>Why OpenStreetMap?</b> OSM is a mapping service in which all data is constantly updated and edited by everyday people like you. The obvious benefit is that it's free to use, but it has also become a major player in crisis mapping (e.g. use of OSM data to coordinate earthquake relief efforts in Haiti). Accuracy of this data is critical, and we hope you are able to volunteer some of your time!</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text condenseWhite="true" width="100%" id="activeMembers">
               <mx:htmlText>
                 <![CDATA[
                   <p><b>+ For active OpenStreetMap members</b>, please sign in to OSM before editing</b></p>
       </mx:Grid>
     </mx:VBox>
 
-    <mx:VBox label="Introduction" width="100%" height="100%" hide="introvideo.stopPlaying()" removedFromStage="introvideo.stopPlaying()">
+    <mx:VBox id="introduction" label="Introduction" width="100%" height="100%" hide="introvideo.stopPlaying()" removedFromStage="introvideo.stopPlaying()">
                <help:VideoPlayer width="640" height="369" id="introvideo"
                        file="help/introduction.mp4" 
                        previewImage="help/introduction.jpg" />
        </mx:VBox>
 
-    <mx:VBox label="Controls" width="100%" height="100%">
-      <mx:Label text="Interface Controls" textAlign="center" width="100%" styleName="helpPageHeader"/>
+    <mx:VBox id="Controls" label="Controls" width="100%" height="100%">
+      <mx:Label id="interfaceControls" text="Interface Controls" textAlign="center" width="100%" styleName="helpPageHeader"/>
       <mx:Grid width="100%">
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="Background" styleName="helpHeaderText" />
+            <mx:Label id="background" width="100%" text="Background" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="mapBackground" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Choose your map background from one of the items in the list or add your own vector file.</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="Map Style" styleName="helpHeaderText" />
+            <mx:Label id="mapStyle" width="100%" text="Map Style" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="colourStyle" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Choose the style in which you wish to view the map. Colours and overall style vary and also includes other options like wireframe.</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="GPS" styleName="helpHeaderText" />
+            <mx:Label id="gps" width="100%" text="GPS" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="createOsmMap" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Create OSM map data using other people's GPS tracks as a background</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="MyGPX" styleName="helpHeaderText" />
+            <mx:Label id="myGpx" width="100%" text="MyGPX" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="displayGps" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Display GPS traces that you've previously uploaded to OpenStreetMap.</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="Undo / Redo" styleName="helpHeaderText" />
+            <mx:Label id="undoRedo" width="100%" text="Undo / Redo" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="madeMistake" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Made a mistake? Just hit undo and/or redo to correct your edits.</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="Help" styleName="helpHeaderText" />
+            <mx:Label id="help" width="100%" text="Help" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
-            <mx:Text condenseWhite="true" width="100%">
+            <mx:Text id="guideInfomation" condenseWhite="true" width="100%">
               <mx:htmlText>
                 <![CDATA[
                   <p>Brings up this guide in case you need any information as you begin editing.</p>
         </mx:GridRow>
         <mx:GridRow width="100%">
           <mx:GridItem>
-            <mx:Label width="100%" text="Save" styleName="helpHeaderText" />
+            <mx:Label id="save" width="100%" text="Save" styleName="helpHeaderText" />
           </mx:GridItem>
           <mx:GridItem width="100%">
             <mx:Text id="saveText" condenseWhite="true" width="100%" htmlText="{getSaveText()}" initialize="applyTextStyle(saveText)" />
       </mx:Grid>
     </mx:VBox>
     <mx:VBox label="Adding">
-      <mx:Label text="Adding Features" textAlign="center" width="100%" styleName="helpPageHeader" />
+      <mx:Label id="addingFeatures" text="Adding Features" textAlign="center" width="100%" styleName="helpPageHeader" />
       <mx:Text condenseWhite="true" width="100%" id="addingFeaturesText" initialize="applyTextStyle(addingFeaturesText)">
         <mx:htmlText>
           <![CDATA[
         </mx:htmlText>
       </mx:Text>
     </mx:VBox>
-    <mx:VBox label="Edit (Beg.)">
-      <mx:Label text="Editing Features (Beginner)" textAlign="center" width="100%" styleName="helpPageHeader" />
-      <mx:Text condenseWhite="true" width="100%" height="100%">
+    <mx:VBox id="editBeg" label="Edit (Beg.)">
+      <mx:Label id="editingFeatures" text="Editing Features (Beginner)" textAlign="center" width="100%" styleName="helpPageHeader" />
+      <mx:Text id="editingFeaturesText" condenseWhite="true" width="100%" height="100%">
         <mx:htmlText>
           <![CDATA[
             <p><b>To add a point to an existing way</b>, select the way and shift+click at the desired location.</p>
         </mx:htmlText>
       </mx:Text>
     </mx:VBox>
-    <mx:VBox label="Edit (Adv.)">
-      <mx:Label text="Editing Features (Advanced)" textAlign="center" width="100%" styleName="helpPageHeader" />
-      <mx:Text condenseWhite="true" width="100%" height="100%">
+    <mx:VBox id="editAdv" label="Edit (Adv.)">
+      <mx:Label id="editingFeaturesAdv" text="Editing Features (Advanced)" textAlign="center" width="100%" styleName="helpPageHeader" />
+      <mx:Text id="editingFeaturesAdvText" condenseWhite="true" width="100%" height="100%">
         <mx:htmlText>
           <![CDATA[
             <p><b>To split a way</b>, select the point at which you want to cut, and click the Scissor tool or press X on your keyboard. (Hint: Add a node first in order to cut between nodes.)</p>
         </mx:htmlText>
       </mx:Text>
     </mx:VBox>
-    <mx:VBox label="Tag">
-    <mx:Label text="Tagging Features" textAlign="center" width="100%" styleName="helpPageHeader" />
+    <mx:VBox id="tag" label="Tag">
+    <mx:Label id="taggingFeatures" text="Tagging Features" textAlign="center" width="100%" styleName="helpPageHeader" />
       <mx:Text condenseWhite="true" width="100%" height="100%" id="taggingFeaturesText" initialize="applyTextStyle(taggingFeaturesText)">
         <mx:htmlText>
           <![CDATA[
       </mx:Text>
     </mx:VBox>
     <mx:VBox label="Shortcuts" id="shortcuts">
-      <mx:Label text="Keyboard Shortcuts" textAlign="center" width="100%" styleName="helpPageHeader" />
+      <mx:Label text="Keyboard Shortcuts" textAlign="center" width="100%" styleName="helpPageHeader" id="keyboardShortcuts" />
       <mx:HBox id="shortcuts1" width="100%"/>
       <mx:HBox id="shortcuts2" width="100%">
         <mx:HBox id="shortcuts2a" width="100%" />
   </mx:TabNavigator>
 
   <mx:ControlBar>
-    <mx:Label text="Version: {application.version} Build: {application.build_number}" />
+    <mx:VBox>
+      <mx:Label text="Version: {application.version} Build: {application.build_number}" />
+      <mx:Label text="Locale: {locale}" />
+    </mx:VBox>
     <mx:Spacer width="100%"/>
     <mx:Button label="Ok" click="PopUpManager.removePopUp(this);" styleName="titleWindowButton" />
   </mx:ControlBar>
index 33c720833a80d84f1d5d95ba9360929783a5c90a..4553ddabfa9dcd1f91b44ab1cc4f793785adf355 100644 (file)
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!---
+    VideoPlayer component for P2 help dialog.
+    Embed like this:
+
+    <listing>
+    &lt;help:VideoPlayer width="400" height="300"
+        file="videos/test.flv"
+        previewImage="videos/test_preview.png" /&gt;
+    </listing>
+
+    <p>previewImage is the image that will be shown in the video pane
+    before the user clicks 'play' - usually a still of the first frame
+    of the video. (This means the video file won't be downloaded unless
+    the user actually wants it.)</p>
+
+    -->
 <mx:VBox
     xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:mx="library://ns.adobe.com/flex/mx"
        <fx:Script>
                <![CDATA[ 
 
-                       /** VideoPlayer component for P2 help dialog.
-                               Embed like this:
-
-                               <help:VideoPlayer width="400" height="300" 
-                                       file="videos/test.flv" 
-                                       previewImage="videos/test_preview.png" />
-                                       
-                               previewImage is the image that will be shown in the video pane
-                               before the user clicks 'play' - usually a still of the first frame
-                               of the video. (This means the video file won't be downloaded unless 
-                               the user actually wants it.)
-                       */
-
                        [Bindable] public var file:String;
                        [Bindable] public var previewImage:String; 
                        private var wasPlaying:Boolean;
index 36e9ba2b37a9eb6a12cf4e9d235dd34ee61a04ad..0c246d2fb4b25c01a9e385b35f3823a1e9a4623b 100644 (file)
@@ -105,7 +105,7 @@ package net.systemeD.potlatch2.mapfeatures {
         }
 
         [Bindable(event="nameChanged")]
-        /** The human-readable name of the feature (@name), or null if none. */
+        /** The human-readable name of the feature (name), or null if none. */
         public function get name():String {
                        if (_xml.attribute('name').length()>0) { return _xml.@name; }
                        return null;
index 8aa73f4dfa0d290cd28190e5d12aed4eeaa42291..cc2b5ab35369229daf9a413a0012d7c8a8f8cf90 100644 (file)
@@ -6,12 +6,12 @@ package net.systemeD.potlatch2.mapfeatures.editors {
     import net.systemeD.potlatch2.mapfeatures.*;
 
        public class RelationMemberEditorFactory extends EditorFactory {
-           /** Contains "route"=["hiking","foot"] key/values. The <match> map_features tag is parsed here from
+           /** Contains "route"=["hiking","foot"] key/values. The &lt;match&gt; map_features tag is parsed here from
            * "hiking|foot" pipe-separated values. */
            private var _relationTagPatterns:Object;
                private var _role:String;
         
-        /** Constructs the editing panel for a relation(###), given its <relation> in map_features.xml */
+        /** Constructs the editing panel for a relation(###), given its &lt;relation&gt; in map_features.xml */
         public function RelationMemberEditorFactory(inputXML:XML) {
             super(inputXML);
             _relationTagPatterns = {};
index 868e5ac0228652fa671b41bfe34892262be9611f..3d281cc6bb6810b647e5c5987287088dc0bf7ded 100644 (file)
@@ -10,7 +10,6 @@
     <mx:Image x="0" y="0" source="@Embed('../../../../../embedded/restriction.svg')" />
     
     <mx:TextInput id="valueText" text="{data.value==null ? '--' : data.scalar}" editable="{data.isEditable}"
-        backgroundAlpha="0"
         fontWeight="bold" fontSize="16" textAlign="center" borderStyle="none"
         width="50" x="0" y="7" />
     
index 6e3fdb2e62761a84d14ad0cdf8b9410e8c908ef2..2ab31fad9d4751c7b92ab602256acce18c52ae45 100644 (file)
@@ -54,7 +54,7 @@
                        conn.statusFetcher=null;
                        userState.setProperty("licence_status",false);
                } else {
-                       conn.statusFetcher=new StatusFetcher("http://wtfe.gryph.de/api/0.6/userlist",conn);
+                       conn.statusFetcher=new StatusFetcher("http://wtfe.gryph.de/api/0.6/problems",conn);
                        conn.statusFetcher.fetch(conn.getAllLoadedEntities());
                        userState.setProperty("licence_status",true);
                        // ** FIXME: needs to also switch map style
@@ -90,7 +90,7 @@
 
   <mx:ControlBar>
     <mx:Spacer width="100%"/>
-    <mx:Button label="Ok" click="PopUpManager.removePopUp(this);" styleName="titleWindowButton" />
+    <mx:Button id="ok" label="Ok" click="PopUpManager.removePopUp(this);" styleName="titleWindowButton" />
   </mx:ControlBar>
 
 </mx:TitleWindow>
index f22182355631d52855396f82cf3dfb1699a4779e..a68da1bb09e428e465e1bdd650c6fc3eded8de6c 100644 (file)
@@ -1,22 +1,28 @@
 <?xml version="1.0" encoding="utf-8"?>
-
-<!--
-    Background Merge Panel
+<!---
+    The Background Merge Panel allows the tags from two features - one from
+    a read-only vector background layer, one from an editable layer - to be
+    compared. Tags are highlighted depending whether they match, and tags from
+    the background layer can be easily merged.
 -->
 
-<mx:VBox xmlns:mx="http://www.adobe.com/2006/mxml" height="100%">
-  <mx:Text id="backgroundMergePanelText" text="Review and Merge tags from the Background layer" width="100%" styleName="helpInfo" />
+<mx:VBox
+    xmlns:fx="http://ns.adobe.com/mxml/2009"
+    xmlns:mx="library://ns.adobe.com/flex/mx"
+    xmlns:s="library://ns.adobe.com/flex/spark"
+    height="100%">
+  <s:RichText id="backgroundMergePanelText" width="100%">Review and Merge tags from the Background layer</s:RichText>
   <mx:DataGrid editable="false" id="backgroundPanelDG" width="100%" height="50%">
     <mx:columns>
       <mx:DataGridColumn editable="false" dataField="k" headerText="Key" />
       <mx:DataGridColumn editable="false" dataField="e" headerText="OSM value" />
-      <mx:DataGridColumn editable="false" headerText="Merge" width="50" textAlign="center">
+      <mx:DataGridColumn editable="false" headerText="Merge" width="150" textAlign="center">
         <mx:itemRenderer>
-          <mx:Component>
-            <mx:HBox horizontalAlign="center" verticalAlign="middle">
-              <mx:Button label="&lt;&lt;" visible="{parentDocument.buttonVisible(data.b, data.e)}" click="parentDocument.mergeForKey(data.k);" />
+          <fx:Component>
+            <mx:HBox horizontalAlign="center" verticalAlign="middle" width="100%">
+              <s:Button width="50" label="&lt;&lt;" visible="{parentDocument.buttonVisible(data.b, data.e)}" click="parentDocument.mergeForKey(data.k);" />
             </mx:HBox>
-          </mx:Component>
+          </fx:Component>
         </mx:itemRenderer>
       </mx:DataGridColumn>
       <mx:DataGridColumn editable="false" itemRenderer="net.systemeD.potlatch2.panels.BackgroundMergeFieldComponent" dataField="b" headerText="Background value" />
   <mx:ViewStack id="statusStack" resizeToContent="true" width="100%">
     <mx:VBox id="empty" />
     <mx:VBox id="not_complete">
-      <mx:Text text="All the data copied to the main layer? Click 'complete'!" />
-      <mx:Button label="Complete" click="markComplete()"/>
+      <s:VGroup width="100%">
+        <s:RichText width="100%">If all the information from this feature is accounted for in the main layer, you can mark this feature as 'complete'.</s:RichText>
+        <s:RichText width="100%">This lets other contributors see what still needs reconciling.</s:RichText>
+        <s:Button label="Mark feature as Complete" click="markComplete()"/>
+      </s:VGroup>
     </mx:VBox>
-    <mx:VBox id="complete">
-      <mx:Text text="This feature has been marked as complete. If this is wrong, press the button below." />
-      <mx:Button label="Not complete" click="markNotComplete()"/>
+    <mx:VBox id="complete" width="100%">
+      <s:VGroup width="100%">
+        <s:RichText width="100%">This feature has been marked as 'complete'. If this is incorrect, and there is still reconciling required, you can mark this feature as 'not complete'.</s:RichText>
+        <s:Button label="Mark feature as Not complete" click="markNotComplete()"/>
+      </s:VGroup>
     </mx:VBox>
   </mx:ViewStack>
-  <mx:Script><![CDATA[
+  <fx:Script><![CDATA[
 
       import net.systemeD.halcyon.connection.*;
       import net.systemeD.halcyon.MapPaint;
       private var backgroundEntity:Entity;
       private var tagDataProvider:ArrayCollection;
 
+      /**
+      * @param entities The two entities that are being compared. One should be from a background layer, but the
+      *                 order is not important.
+      */
       public function init(entities:Array):void {
           if ( tagDataProvider == null ) {
               tagDataProvider = new ArrayCollection();
           updateTagDataProvider();
       }
 
+      /**
+      * Should the button for merging tags be shown?
+      *
+      * @param b The tag value for the background entity
+      * @param e The tag value for the editable entity
+      */
       public function buttonVisible(b:String, e:String):Boolean {
           if (b != null && b != e) {
               return true;
           return false;
       }
 
+      /**
+      * Merge the data for the given key. Results in the value being copied to the editable entity, using the
+      * global undo stack.
+      *
+      * @param key The tag key to be merged.
+      */
       public function mergeForKey(key:String):void {
           editableEntity.setTag(key, backgroundEntity.getTag(key), MainUndoStack.getGlobalStack().addAction);
       }
 
-      // Don't call this for things you don't want coloured in. Like for empty tags.
+      /**
+      * Figure out an appropriate background color for the row. Don't call this for things you don't want coloured in. Like for empty tags.
+      *
+      * @param i The row index in the tagDataProvider
+      * @return The colour to be used as the background of the field
+      */
       public function getColorFor(i:int):int {
           if (tagDataProvider[i].e == tagDataProvider[i].b) {
               return 0xDDFFDD; // matching, green
           }
       }
   ]]>
-  </mx:Script>
+  </fx:Script>
 </mx:VBox>
\ No newline at end of file
index 2895e75560c87703e5165b7d8d8c1e110a1d2492..394f400cf5a4c6a60665bf862670d3c21459ec14 100644 (file)
@@ -1,44 +1,55 @@
 <?xml version="1.0" encoding="utf-8"?>
-
-<!--
-    Background Panel
+<!---
+    The Background Panel displays details about the background feature selected. It is currently only used
+    by the SnapshotConnection, and so has functionality to allow marking features as "complete".
 -->
 
 <mx:VBox
     xmlns:fx="http://ns.adobe.com/mxml/2009"
     xmlns:mx="library://ns.adobe.com/flex/mx"
+    xmlns:s="library://ns.adobe.com/flex/spark"
     height="100%">
-  <mx:Text id="backgroundPanelText" text="You have selected a Background Feature." width="100%" styleName="helpInfo" />
+  <s:VGroup width="100%">
+    <s:RichText width="100%" id="backgroundPanelText" text="You have selected a Background Feature." />
+    <s:RichText text="{connectionName}" />
+  </s:VGroup>
   <mx:DataGrid editable="false" id="backgroundPanelDG" width="100%" height="50%">
     <mx:columns>
       <mx:DataGridColumn editable="false" dataField="key" headerText="key" />
       <mx:DataGridColumn editable="false" dataField="value" headerText="value" />
     </mx:columns>
   </mx:DataGrid>
+  <s:VGroup width="100%">
+    <s:RichText width="100%">You can see a side-by-side tagging comparison by ctrl+clicking a feature on the main layer.</s:RichText>
+  </s:VGroup>
   <mx:ViewStack id="statusStack" resizeToContent="true" width="100%">
     <mx:VBox id="empty" />
-    <mx:VBox id="not_complete">
-      <mx:Text text="All the data copied to the main layer? Click 'complete'!" />
-      <mx:Button label="Complete" click="markComplete()"/>
+    <mx:VBox id="not_complete" width="100%">
+      <s:VGroup width="100%">
+        <s:RichText width="100%">If all the information from this feature is accounted for in the main layer, you can mark this feature as 'complete'.</s:RichText>
+        <s:RichText width="100%">This lets other contributors see what still needs reconciling.</s:RichText>
+        <s:Button label="Mark feature as Complete" click="markComplete()"/>
+      </s:VGroup>
     </mx:VBox>
-    <mx:VBox id="complete">
-      <mx:Text text="This feature has been marked as complete. If this is wrong, press the button below." />
-      <mx:Button label="Not complete" click="markNotComplete()"/>
+    <mx:VBox id="complete" width="100%">
+      <s:VGroup width="100%">
+        <s:RichText width="100%">This feature has been marked as 'complete'. If this is incorrect, and there is still reconciling required, you can mark this feature as 'not complete'.</s:RichText>
+        <s:Button label="Mark feature as Not complete" click="markNotComplete()"/>
+      </s:VGroup>
     </mx:VBox>
   </mx:ViewStack>
   <fx:Script><![CDATA[
 
       import net.systemeD.halcyon.connection.*;
-      import net.systemeD.halcyon.MapPaint;
       import net.systemeD.potlatch2.utils.SnapshotConnection;
       import mx.collections.*;
 
       private var selectedEntity:Entity;
       private var tagDataProvider:ArrayCollection;
-      private var layer:MapPaint;
+      [Bindable]
+      private var connectionName:String;
 
-      public function init(entity:Entity, layer:MapPaint):void {
-          this.layer = layer;
+      public function init(entity:Entity):void {
           if ( tagDataProvider == null ) {
               tagDataProvider = new ArrayCollection();
               backgroundPanelDG.dataProvider = tagDataProvider;
@@ -46,6 +57,7 @@
 
           selectedEntity=entity;
           selectedEntity.addEventListener(Connection.STATUS_CHANGED, statusEvent, false, 0, true);
+          connectionName = selectedEntity.connection.name;
           setStatusStack();
           updateTagDataProvider();
       }
index cf5f66369232512216e87104ca83d93becf71db2..f345701fc16f4abda2de5d1123f5687c14e64399 100644 (file)
@@ -21,7 +21,7 @@
            <mx:LinkButton id="link"
                label="http://oauth.dev.openstreetmap.org/oauth/authorize?somekey"
                click="openURL(authoriseURL); tryAccessButton.enabled=true;"/>
-           <mx:Text width="100%">
+           <mx:Text id="authorized" width="100%">
              <mx:text>Once you've authorised the access click the 'Try Access' button below</mx:text> <!-- ' -->
            </mx:Text>
            <mx:Text styleName="failText" visible="false" id="deniedLabel">
@@ -34,7 +34,7 @@
        </mx:VBox>
        
        <mx:VBox id="permFailPanel" width="100%" height="100%">
-         <mx:Text styleName="failText" width="100%" condenseWhite="true">
+         <mx:Text id="permFail" styleName="failText" width="100%" condenseWhite="true">
            <mx:htmlText><![CDATA[
              <p>The server refused this application's credentials -- an authorisation link
              could not be obtained.
@@ -47,7 +47,7 @@
        </mx:VBox>
        
        <mx:VBox id="tempFailPanel" width="100%" height="100%">
-         <mx:Text width="100%">
+         <mx:Text id="tempFail" width="100%">
            <mx:text>
              There was a problem contacting the server to get authorisation.
              This may be a temporary error, try again later.
@@ -63,7 +63,7 @@
                indeterminate="true"/>
         <mx:Spacer width="100%"/>
 
-           <mx:Button label="Cancel" click="PopUpManager.removePopUp(this);" styleName="titleWindowButton" />
+           <mx:Button id="cancelButton" label="Cancel" click="PopUpManager.removePopUp(this);" styleName="titleWindowButton" />
            <mx:Button id="tryAccessButton" label="Try Access" click="getAccessToken()" enabled="false" styleName="titleWindowButton" />
        </mx:ControlBar>
        
index d587f4b92a103949b0e72a27336bd050db675b5c..0dda01957278237c12e6188ce598e6e5bc6120e2 100644 (file)
     <mx:VBox width="100%" height="100%" verticalGap="0">
       <mx:ViewStack id="tagStack" width="100%" height="100%">
         <mx:VBox width="100%" height="100%" label="Simple">
-          <mx:Text width="100%">
+          <mx:Text id="editDescription" width="100%">
             <mx:text>
                Please enter a description of your edits. This will be used to give other
                mappers an idea of what changes you are making.
             </mx:text>
           </mx:Text>
-          <mx:Label text="Comment:"/>
+          <mx:Label id="commentLabel" text="Comment:"/>
           <mx:TextArea id="comment" maxChars="255" width="100%" height="100%" change="commentChanged(event);" textInput="monitorEnter(event);" />
         </mx:VBox>
         
index c2b1f9fe1b3ca5205b6ed9d9dceb80b57ccd5466..468d42b7d6c1379361bea22d0e17afed4bb59140 100644 (file)
@@ -62,7 +62,7 @@ package net.systemeD.potlatch2.utils {
                private function parseGPX(event:Event):void {
                        var file:XML = new XML(event.target.data);
                        var action:CompositeUndoableAction = new CompositeUndoableAction("add track objects");
-                       Trace.parseTrkSegs(file,connection,action);
+                       Trace.parseTrkSegs(file,connection,action,true);
             action.doAction(); /* just do it, don't add to undo stack */
                        layer.updateEntityUIs(false, false);
                }
index 7c16e2813fbf2e1ef2dc75f86f7f8c5a71bef4dc..279d08f947299aeaa363d48fbe8c78aeaeaab0aa 100644 (file)
@@ -48,7 +48,7 @@
             creationComplete="bgButton.popUp = new BackgroundSelector();"/>
         <mx:PopUpButton id="styleButton" label="Map Style" openAlways="true" styleName="appBarButton"
             creationComplete="styleButton.popUp = new StyleSelector();"/>
-               <mx:PopUpMenuButton id="gpsButton" styleName="appBarButton"
+               <mx:PopUpMenuButton id="gpsButton" label="GPS Data" styleName="appBarButton"
                    itemClick="if (event.index==0) { trackLoader.load(); } 
                          else if (event.index==1) { new MyGpxDialog().init(); } 
                                              else { mx.controls.Menu(gpsButton.popUp).selectedIndex=0; 
@@ -83,7 +83,7 @@
         <mx:TextArea id="dataWorking" text="" right="5" top="5" disabledColor="black" backgroundDisabledColor="0xFFFFEA" height="18"
             enabled="false" borderThickness="0"
             showEffect="{wipeIn}" hideEffect="{wipeOut}"/>
-        <mx:TextArea id="coordsbox" left="25" top="5" disabledColor="black" backgroundDisabledColor="0xFFFFEA" height="30"
+        <mx:TextArea id="coordsbox" left="25" top="5" disabledColor="black" backgroundDisabledColor="0xFFFFEA" height="33"
             width="57" enabled="false" borderThickness="0" visible="false"/>
 
     </mx:Canvas>
                import net.systemeD.potlatch2.utils.*;
         import net.systemeD.potlatch2.mygpx.*;
                import net.systemeD.controls.FloatingAlert;
+               import net.systemeD.controls.Spinner;
                import mx.managers.PopUpManager;
                import flash.system.Security;
                import flash.net.*;
         import mx.managers.DragManager;
         import mx.core.DragSource;
         import mx.controls.Alert;
-        import com.mindspace.l10n.events.LocaleEvent;
+        import org.babelfx.events.LocaleEvent;
 
         public var theMap:Map;
         public var theController:EditController;
 
                private var savecount:uint=0;
                private var loadcount:uint=0;
+               private var spinner:Spinner;
                private var saveLabel:String='Save';
                private var saveTimer:Timer;
 
         include "version.as";
 
                private function startInit():void {
-            /* For reasons that I don't yet understand, the en_US locale is the default and doesn't work at all. */
-            /* Change this to another locale (e.g. fr_FR) to see the differences. */
-            if (loaderInfo.parameters['locale']) {
-              dispatchEvent(new LocaleEvent(LocaleEvent.LOAD_LOCALE,loaderInfo.parameters['locale']));
-            }
                        var loader:Loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, startApp);
                        loader.load(new URLRequest("FontLibrary.swf"));
+
+            if (loaderInfo.parameters['locale']) {
+                Globals.vars.locale = loaderInfo.parameters['locale'];
+                dispatchEvent(new LocaleEvent(LocaleEvent.LOAD_LOCALE, loaderInfo.parameters['locale']));
+                dispatchEvent(new LocaleEvent(LocaleEvent.LOAD_LOCALE, 'en_US')); // think en_US is default
+                resourceManager.localeChain = [loaderInfo.parameters['locale'], 'en_US'];
+            }
                }
                
                private function startApp(event:Event):void {
                        conn.addEventListener(MapEvent.ERROR, onMapError);
                        conn.addEventListener(AttentionEvent.ATTENTION, onAttention);
                        conn.addEventListener(AttentionEvent.ALERT, onAlert);
-                       if (params['licence_status']) conn.statusFetcher=new StatusFetcher("http://wtfe.gryph.de/api/0.6/userlist",conn);
+                       if (params['licence_status']) conn.statusFetcher=new StatusFetcher("http://wtfe.gryph.de/api/0.6/problems",conn);
                        theMap.addLayer(conn, Stylesheets.instance().selected, false, true);
 
             // Auto-load vector backgrounds from config
             theMap.addEventListener(MapEvent.INITIALISED, function(e:Event):void { VectorBackgrounds.instance().init(theMap); });
 
+                       // Add loading 'spinner' indicator
+                       spinner=new Spinner();
+                       _root.addChild(spinner);
+                       spinner.x=dataWorking.x-20;
+                       spinner.y=dataWorking.y+dataWorking.height/2;
+
                        // Set start position of map
                        // ** FIXME: if lat/lon/zoom aren't supplied, we need to keep the map in a non-loading state 
                        //           until the user has decided where to start editing (e.g. when the first GPX loads)
                
                public function onMapError(mapEvent:MapEvent):void {
                        var buttons:uint=0;
-                       if (mapEvent.params.no) { trace("no is set"); }
                        if (mapEvent.params.yes             ) buttons|=mx.controls.Alert.YES;
                        if (mapEvent.params.no              ) buttons|=mx.controls.Alert.NO;
                        if (mapEvent.params.cancel          ) buttons|=mx.controls.Alert.CANCEL;
                        if (mapEvent.params.ok || buttons==0) buttons|=mx.controls.Alert.OK;
-                       trace("showing alert with "+buttons);
                        Alert.show(mapEvent.params.message, 'Error', buttons, null, function(closeEvent:CloseEvent):void { 
                                switch (closeEvent.detail) {
                                        case mx.controls.Alert.CANCEL:  mapEvent.params.cancel(); break; //fixme? this gets called if user presses escape, even if there's no cancel button.
             updateDataWorking();
         }
                private function updateDataWorking():void {
-                       if (loadcount>0 && savecount>0) { dataWorking.text="Loading/saving..."; }
-                       else if (loadcount>0)           { dataWorking.text="Loading data..."; }
-                       else if (savecount>0)           { dataWorking.text="Saving data..."; }
-                       else                            { dataWorking.text=""; }
-                       dataWorking.visible=(dataWorking.text!="");
+                       var t:String;
+                       if (loadcount>0 && savecount>0) { t="Loading/saving#..."; }
+                       else if (loadcount>0)           { t="Loading data#..."; }
+                       else if (savecount>0)           { t="Saving data..."; }
+                       else                            { t=""; }
+                       dataWorking.text=t.replace("#",(loadcount>1) ? (" ("+loadcount+")") : "");
+
+                       var previousState:Boolean=dataWorking.visible;
+                       var newState:Boolean=(dataWorking.text!="");
+                       if (!previousState && newState) spinner.start();
+                       if (previousState && !newState) spinner.stop();
+                       dataWorking.visible=newState;
                }
         private function onDataDirty(event:Event):void {
                        saveButton.enabled=true;
index aa1b7da4bde8c218203f61c470236783d63e6139..e825026898569d34add085fddab0e207904ffc34 100644 (file)
   </feature>
 
 
-  <feature name="Sports centre">
-    <category>buildings</category>
-    <icon image="features/pois/sport_leisure_centre.n.24.png">
-      <b>${name} ${addr:housename}</b><br/>
-      ${addr:housenumber} ${addr:street} ${addr:postcode}
-    </icon>
-
-    <area/>
-    <point/>
-    <tag k="leisure" v="sports_centre"/>
-    <inputSet ref="names"/>
-    <inputSet ref="buildingAddress"/>
-    <inputSet ref="pitchSport"/>
-    <inputSet ref="isBuilding"/>
-    <inputSet ref="common"/>
-  </feature>
-
-
   <!-- Generic building. Should be last in the entire xml chain -->
   <!-- When user changes feature to some amenity, building tag is cleared. This should not be. -->
   <feature name="Building">
index 09b921f8e68dd7ff38c503382332fb6fdb647adf..5a8eb106628a34e5b3a2143ff0c3b6b624e9d689 100644 (file)
     <inputSet ref="common"/>
   </feature>
 
+  <feature name="Sports centre">
+    <category>sport</category>
+    <icon image="features/pois/sport_leisure_centre.n.24.png">
+      <b>${name} ${addr:housename}</b><br/>
+      ${addr:housenumber} ${addr:street} ${addr:postcode}
+    </icon>
+
+    <area/>
+    <point/>
+    <tag k="leisure" v="sports_centre"/>
+    <inputSet ref="names"/>
+    <inputSet ref="buildingAddress"/>
+    <inputSet ref="pitchSport"/>
+    <inputSet ref="isBuilding"/>
+    <inputSet ref="common"/>
+  </feature>
+
+
   <!-- **************** Agriculture *************** -->
   <feature name="Farm">
     <category>agriculture</category>
 
   <feature name="Forest">
     <category>natural</category>
-    <icon image="/features/pois/landuse_coniferous.n.24.png"/>
+    <icon image="features/pois/landuse_coniferous.n.24.png"/>
 
     <area/>
     <tag k="landuse" v="forest"/>
     <tag k="landuse" v="meadow"/>
     <inputSet ref="common"/>
   </feature>
-</featureGroup>
\ No newline at end of file
+</featureGroup>
index 5b17f067d5e7341cfe6d2824cdcb2ee50f0cf63b..08080648617183f74a963d2ecaeb480c127ddbe3 100644 (file)
@@ -69,6 +69,7 @@
       args["show_help"] = "once";
       args["site_name"] = "OpenStreetMap";
       args["force_auth"] = "force";
+      args["locale"] = 'en_US';      // you can enjoy de_DE, pl_PL, fr_FR, ja_JP, id_ID, en_GB
 
       var params = false;
 
index 30c6e8e1d99140a4794a3e500cf048d6c6e7ca7c..6c260b0fc964dbe6fb3ba75e9fc94d4979e5e80e 100644 (file)
@@ -42,22 +42,35 @@ way .path              { text:name; text-color: black; text-position: offset; te
 
 way[highway=proposed] { color: #88ffff; width: 6; dashes: 8, 4; }
 way[highway=construction] { color: #ffffbb; width: 6; dashes: 8, 4; casing-color: #0000aa; casing-width: 1; casing-dashes: 8,4;}
-way[construction=rail] { z-index: 6; color: black; width: 5; dashes: 6, 6, 4, 8;}
-way[construction=rail]::inner { z-index: 7; color: white; width: 3; dashes: 6,18; }
 
 /* Railways */
 
 way[railway=rail] { z-index: 6; color: black; width: 5; }
 way[railway=rail]::dashes { z-index: 7; color: white; width: 3; dashes: 12,12; }
 
+way[construction=rail] { z-index: 6; color: black; width: 5; dashes: 6, 6, 4, 8;}
+way[construction=rail]::inner { z-index: 7; color: white; width: 3; dashes: 6,18; }
+
 way[railway=platform] { color:black; width: 2; }
 
 way[railway=subway] { z-index: 6; color: #444444; width: 5; }
 way[railway=subway]::dashes  { z-index: 7; color: white; width: 3; dashes: 8,8; }
 
+way[construction=subway] { z-index: 6; color: #444444; width: 5; dashes: 4, 4; }
+way[construction=subway]::dashes  { z-index: 7; color: white; width: 3; dashes: 4,12;}
+
 way[railway=disused],way[railway=abandoned] { z-index: 6; color: #444400; width: 3; dashes: 17, 2, 5, 0; }
 way[railway=disused]::dashes,way[railway=abandoned]::dashes { z-index: 7; color: #999999; width: 2; dashes: 12,12; }
 
+way[railway=tram]      { z-index: 11; color: #999999; width: 2; casing-color: black; casing-width: 2; }
+way[construction=tram] { z-index: 11; color: #999999; width: 2; casing-color: black; casing-width: 2; dashes: 6, 6; casing-dashes: 6, 6; }
+
+way[railway=light_rail] { z-index: 6; color: black; width: 4; }
+way[railway=light_rail]::dashes { z-index: 7; color: #999999; width: 2; dashes: 8,4; }
+
+way[construction=light_rail] { z-index: 6; color: black; width: 4; dashes: 8, 4, 4, 4; }
+way[construction=light_rail]::dashes { z-index: 7; color: #999999; width: 2; dashes: 8,12; }
+
 /* Waterways */        
 
 way[waterway=river], 
index 88094fc43bc68b8545b185600aabde56b6ce362d..1598735d859168bcbd083dd9ca34d8a7b3453559 100644 (file)
@@ -20,9 +20,9 @@ way .area_small_name {text-color: black; font-size: 9; text: name; text-halo: #f
 
 /* Rendering for licence status */
 
-way[_status=no]::status       { z-index: 0; width: eval('_width+7'); color: red; }
-way[_status=partial]::status  { z-index: 0; width: eval('_width+7'); color: red; opacity: 0.4; }
-way[_status=unsure]::status   { z-index: 0; width: eval('_width+7'); color: orange; opacity: 0.4; }
-node[_status=no]::status      { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: red; }
-node[_status=partial]::status { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: red; opacity: 0.4; }
-node[_status=unsure]::status  { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: orange; opacity: 0.4; }
+way[_status=no]::status       { z-index: 0; width: eval('_width+7'); color: #AA0000; }
+way[_status=partial]::status  { z-index: 0; width: eval('_width+7'); color: #AA0000; opacity: 0.6; }
+way[_status=unsure]::status   { z-index: 0; width: eval('_width+7'); color: darkorange; opacity: 0.6; }
+node[_status=no]::status      { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: #AA0000; }
+node[_status=partial]::status { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: #AA0000; opacity: 0.6; }
+node[_status=unsure]::status  { z-index: 0; icon-image: square; icon-width: eval('_width+7'); color: darkorange; opacity: 0.6; }
index ef9442782779b9c0c5d6513fc76edfc6840225cf..5450546e3a9cefb52e2699637d78e95b82eb4fe6 100644 (file)
@@ -4,21 +4,23 @@
 
 */
 
-way :hover     { z-index: 2; width: 1; color: yellow; }
-way :selected { z-index: 2; width: 2; color: yellow; }
-way !:drawn { z-index:10; width: 1; color: black; }
-
-node :selectedway { z-index: 8; icon-image: square; icon-width: 6; color: green; }
-node :hoverway { z-index: 9; icon-image: square; icon-width: 6; color: blue; }
-node :selected { z-index: 9; icon-image: square; icon-width: 6; color: red; casing-color: black; casing-width: 1; }
-node !:drawn :poi { z-index: 2; icon-image: square; icon-width: 4; color: green; casing-color: black; casing-width: 1; }
-node !:drawn :hasTags { z-index: 9; icon-image: circle; icon-width: 3; color: black; }
-node :hasTags :selectedway { z-index: 9; icon-image: square; icon-width: 8; color: black; layer: 5; }
-
-way[_status=incomplete]::statushighlight { z-index: 0; width: 10; color: #d95f02; }
-way[_status=complete]::statushighlight { z-index: 0; width: 10; color: #1b9e77; opacity: 0.4; }
-node[_status=incomplete]::statushighlight :hasTags { z-index: 0; icon-image: square; icon-width: 10; color: #d95f02; }
-node[_status=complete]::statushighlight :hasTags { z-index: 0; icon-image: square; icon-width: 10; color: #1b9e77; opacity: 0.4; }
+way :hover     { z-index: 2; width: 14; color: yellow; linecap: round; }
+way :selected { z-index: 2; width: 14; color: yellow; linecap: round; }
+way !:drawn { z-index: 1; width: 14; color: #444444; linecap: round; }
+
+node :selectedway { z-index: 8; icon-image: circle; icon-width: 8; color: green; }
+node :hoverway { z-index: 9; icon-image: circle; icon-width: 8; color: blue; }
+node :selected { z-index: 9; icon-image: circle; icon-width: 8; color: red; casing-color: black; casing-width: 1; }
+node !:drawn :poi { z-index: 6; icon-image: circle; icon-width: 8; color: green; casing-color: black; casing-width: 1; }
+node !:drawn :hasTags { z-index: 9; icon-image: circle; icon-width: 8; color: black; }
+node :hasTags :selectedway { z-index: 9; icon-image: circle; icon-width: 8; color: black; }
+
+way[_status=incomplete]::statushighlight { z-index: 0; width: 20; color: #d95f02; linecap: round; }
+way[_status=complete]::statushighlight { z-index: 0; width: 18; color: #1b9e77; opacity: 0.4; linecap: round; }
+way[_status=complete] { opacity: 0.7; }
+node[_status=incomplete]::statushighlight :hasTags { z-index: 5; icon-image: circle; icon-width: 12; color: #d95f02; }
+node[_status=complete]::statushighlight :hasTags { z-index: 5; icon-image: circle; icon-width: 10; color: #1b9e77; opacity: 0.4; }
+node[_status=complete] { opacity: 0.7; }
 
 
 
diff --git a/tests/fakeroot/embedded b/tests/fakeroot/embedded
new file mode 120000 (symlink)
index 0000000..d692853
--- /dev/null
@@ -0,0 +1 @@
+../../embedded/
\ No newline at end of file
index 9524b1684a4588f8746b8b31242f7d929e2b8c39..0e68c1caf7fd088be9b295f9d11c71848e4d21f3 100644 (file)
@@ -4,8 +4,12 @@ package net.systemeD.halcyon.connection {
     import net.systemeD.halcyon.connection.Node;
     import net.systemeD.halcyon.connection.UndoableAction;
 
+    [RunWith("org.mockito.integrations.flexunit4.MockitoClassRunner")]
     public class NodeTest {
 
+      [Mock(type="net.systemeD.halcyon.connection.Connection", argsList="constructorArgs")]
+      public var connection:Connection;
+      public var constructorArgs:Array = ["name", "api", "policy"];
     
       [Test]
       public function dummy():void {
@@ -14,13 +18,13 @@ package net.systemeD.halcyon.connection {
 
       [Test]
       public function newNode():void {
-          var n:Node = new Node(1,1,{},true,5,10);
+          var n:Node = new Node(connection,1,1,{},true,5,10);
           Assert.assertEquals(n.lat, 5);
       }
 
       [Test]
       public function moveNode():void {
-          var n:Node = new Node(1,1,{},true,5,10);
+          var n:Node = new Node(connection,1,1,{},true,5,10);
           n.setLatLon(14,41, function(action:UndoableAction):void { action.doAction(); });
           Assert.assertEquals(n.lat, 14);
           Assert.assertEquals(n.lon, 41);
@@ -28,7 +32,7 @@ package net.systemeD.halcyon.connection {
 
       [Test]
       public function within():void {
-          var n:Node = new Node(1,1,{},true,5,10);
+          var n:Node = new Node(connection,1,1,{},true,5,10);
           Assert.assertTrue(n.within(9,11,6,4));
           Assert.assertFalse(n.within(9,11,1,2));
           Assert.assertFalse(n.within(11,12,6,4));
index 084b135be06d09b4356621f70005f6e935282da2..fcc43bc9f0bd042edce26dd3f2d8974b631f35b3 100644 (file)
@@ -8,21 +8,26 @@ package net.systemeD.halcyon.connection.actions {
     import net.systemeD.halcyon.connection.UndoableAction;
     import net.systemeD.halcyon.connection.*;
 
+    [RunWith("org.mockito.integrations.flexunit4.MockitoClassRunner")]
     public class AddMemberToRelationActionTest {
 
+        [Mock(type="net.systemeD.halcyon.connection.Connection", argsList="constructorArgs")]
+        public var connection:Connection;
+        public var constructorArgs:Array = ["name", "api", "policy"];
+
         [Before]
         public function setUp():void {
             //Instantiate the connection first to prevent errors
-            Connection.getConnection();
+            //Connection.getConnection();
         }
 
 
         [Test]
         public function addMember():void {
 
-            var n:Node = new Node(1,1,{},true,5,10);
+            var n:Node = new Node(connection,1,1,{},true,5,10);
 
-            var rel:Relation = new Relation(1,1,{},true,[]);
+            var rel:Relation = new Relation(connection,1,1,{},true,[]);
             var member:RelationMember = new RelationMember(n, "foo");
 
             rel.appendMember(member, function(action:UndoableAction):void { action.doAction(); });
@@ -46,15 +51,15 @@ package net.systemeD.halcyon.connection.actions {
 
         [Test]
         public function appendMember():void {
-            var n:Node = new Node(1,1,{},true,5,10);
-            var n2:Node = new Node(2,1,{},true,5,10);
-            var n3:Node = new Node(3,1,{},true,5,10);
+            var n:Node = new Node(connection,1,1,{},true,5,10);
+            var n2:Node = new Node(connection,2,1,{},true,5,10);
+            var n3:Node = new Node(connection,3,1,{},true,5,10);
 
             var member1:RelationMember = new RelationMember(n, "first");
             var member2:RelationMember = new RelationMember(n2, "second");
             var member3:RelationMember = new RelationMember(n3, "third");
 
-            var rel:Relation = new Relation(1,1,{},true, [member1, member2]);
+            var rel:Relation = new Relation(connection,1,1,{},true, [member1, member2]);
             Assert.assertEquals(2, rel.length);
 
             rel.appendMember(member3, function(action:UndoableAction):void { action.doAction(); });
@@ -63,15 +68,15 @@ package net.systemeD.halcyon.connection.actions {
 
         [Test]
         public function setMember():void {
-            var n:Node = new Node(1,1,{},true,5,10);
-            var n2:Node = new Node(2,1,{},true,5,10);
-            var n3:Node = new Node(3,1,{},true,5,10);
+            var n:Node = new Node(connection,1,1,{},true,5,10);
+            var n2:Node = new Node(connection,2,1,{},true,5,10);
+            var n3:Node = new Node(connection,3,1,{},true,5,10);
 
             var member1:RelationMember = new RelationMember(n, "first");
             var member2:RelationMember = new RelationMember(n2, "second");
             var member3:RelationMember = new RelationMember(n3, "third");
 
-            var rel:Relation = new Relation(1,1,{},true, [member1, member2]);
+            var rel:Relation = new Relation(connection,1,1,{},true, [member1, member2]);
             Assert.assertEquals(2, rel.length);
 
             rel.setMember(1, member3, function(action:UndoableAction):void { action.doAction(); });
index f8c6f118e839e5c6c86d66606824cf7769a6a2e9..1130c0de9e6b3adbaf431ec8769619048a4e67dd 100644 (file)
@@ -4,13 +4,19 @@ package net.systemeD.halcyon.connection.actions {
     import net.systemeD.halcyon.connection.actions.JoinNodeAction;
     import net.systemeD.halcyon.connection.Node;
     import net.systemeD.halcyon.connection.UndoableAction;
+    import net.systemeD.halcyon.connection.Connection;
 
+    [RunWith("org.mockito.integrations.flexunit4.MockitoClassRunner")]
     public class JoinNodeActionTest {
 
+      [Mock(type="net.systemeD.halcyon.connection.Connection", argsList="constructorArgs")]
+      public var connection:Connection;
+      public var constructorArgs:Array = ["name", "api", "policy"];
+
         [Test]
         public function joinTwoNodes():void {
-            var n:Node = new Node(1,1,{},true,5,10);
-            var n1:Node = new Node(2,1,{},true,5,10);
+            var n:Node = new Node(connection,1,1,{},true,5,10);
+            var n1:Node = new Node(connection,2,1,{},true,5,10);
             var action:UndoableAction = new JoinNodeAction(n, [n1], []);
             action.doAction();
             Assert.assertFalse(n.isDeleted());
index 7ca18ec7b6891cf783592cf453b666b7922d9627..540539276714cb45e0f9ff77fc1885a03350333c 100644 (file)
@@ -6,17 +6,22 @@ package net.systemeD.halcyon.connection.actions {
     import net.systemeD.halcyon.connection.Entity;
     import net.systemeD.halcyon.connection.Connection;
 
+    [RunWith("org.mockito.integrations.flexunit4.MockitoClassRunner")]
     public class SetTagActionTest {
 
+        [Mock(type="net.systemeD.halcyon.connection.Connection", argsList="constructorArgs")]
+        public var connection:Connection;
+        public var constructorArgs:Array = ["name", "api", "policy"];
+
         [Before]
         public function setUp():void {
             //Instantiate the connection first to prevent errors
-            Connection.getConnection();
+            //Connection.getConnection();
         }
 
         [Test]
         public function setTag():void {
-            var e:Entity = new Entity(1,1,{},true,1,"");
+            var e:Entity = new Entity(connection,1,1,{},true,1,"");
             var action:UndoableAction = new SetTagAction(e, "foo", "bar");
             action.doAction();
 
@@ -25,7 +30,7 @@ package net.systemeD.halcyon.connection.actions {
 
         [Test]
         public function setNullTag():void {
-            var e:Entity = new Entity(1,1,{foo: "bar"},true,1,"");
+            var e:Entity = new Entity(connection,1,1,{foo: "bar"},true,1,"");
             var action:UndoableAction = new SetTagAction(e, "foo", null);
             action.doAction();