diff --git a/.gitignore b/.gitignore
index f997918520..e08d13c0a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,9 @@ server/web/static/dist/
logs/
*.log
+# Ignore some translation stuff
+.tx/tasking-manager.master/
+
#python
venv/
*pyc
diff --git a/.tx/config b/.tx/config
index 409281d5ce..ac70970fed 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,7 +1,7 @@
[main]
host = https://www.transifex.com
-[tasking-manager-3.master]
+[tasking-manager.master]
source_file = client/locale/en.json
source_lang = en
trans.ar = client/locale/ar.json
@@ -10,11 +10,11 @@ trans.cs = client/locale/cs.json
trans.da = client/locale/da.json
trans.de = client/locale/de.json
trans.es = client/locale/es.json
-trans.fi = client/locale/fi.json
trans.fa_IR = client/locale/fa_IR.json
+trans.fi = client/locale/fi.json
trans.fr = client/locale/fr.json
-trans.hu = client/locale/hu.json
trans.gl = client/locale/gl.json
+trans.hu = client/locale/hu.json
trans.id = client/locale/id.json
trans.it = client/locale/it.json
trans.ja = client/locale/ja.json
@@ -34,3 +34,4 @@ trans.uk = client/locale/uk.json
trans.vi = client/locale/vi.json
trans.zh_TW = client/locale/zh_TW.json
type = KEYVALUEJSON
+
diff --git a/Makefile b/Makefile
index e3d8f248df..0d918d54ad 100644
--- a/Makefile
+++ b/Makefile
@@ -10,7 +10,7 @@ ifndef DOCKER_COMPOSE_VERSION
endif
build:
- docker-compose build app
+ docker-compose build --no-cache app
up:
docker-compose up -d
@@ -21,6 +21,12 @@ down:
list:
docker-compose ps
+refresh-translatables:
+ docker-compose exec app sh -c "python manage.py refresh_translatables"
+
+refresh-translations:
+ docker-compose exec app sh -c "tx pull -af"
+
tests:test-client test-server
test-client:
diff --git a/client/app/admin/edit-project/edit-project.html b/client/app/admin/edit-project/edit-project.html
index e9833b702e..8d4e199e51 100644
--- a/client/app/admin/edit-project/edit-project.html
+++ b/client/app/admin/edit-project/edit-project.html
@@ -276,7 +276,7 @@
{{ 'In this area' | translate }}
{x}, {y} and {z} parameters can only be be used on tasks generated in the Tasking Manager and not on imported tasks.
For example: « This task involves loading extra data. Click [here](http://localhost:8111/import?new_layer=true&url=http://www.domain.com/data/{x}/{y}/{z}/routes_2009.osm) to load the data into JOSM ».' | translate }}
- {{ 'Put here anything that can be useful to users while taking a task. If you have added extra properties within the GeoJSON of the task, they can be referenced by surrounding them in curly braces. For eg. if you have a property called "import_url" in your GeoJSON, you can reference it like:' | translate }}
+ {{ 'Put here anything that can be useful to users while taking a task. If you have added extra properties within the GeoJSON of the task, they can be referenced by surrounding them in curly braces. For eg. if you have a property called `import_url` in your GeoJSON, you can reference it like:' | translate }}
This task involves loading extra data. Click [here](http://localhost:8111/import?new_layer=true&url={import_url}) to load the data into JOSM
{{ 'Causes You Can Help' | translate }}
{{ 'Red Cross - Ayeyarwady Delta' | translate }}
- {{ '"The Red Cross is mapping the Ayeyarwady Delta area in Myanmar as part of a multi-year mapping and data readiness activity to better understand where critical infrastructure and roads are to inform decision making during potential disasters. As recently as 2008 a cyclone killed at least 77,000 people with over 55,900 missing, and left about 2.5 million homeless."' | translate }}
+
"{{ 'The Red Cross is mapping the Ayeyarwady Delta area in Myanmar as part of a multi-year mapping and data readiness activity to better understand where critical infrastructure and roads are to inform decision making during potential disasters. As recently as 2008 a cyclone killed at least 77,000 people with over 55,900 missing, and left about 2.5 million homeless.' | translate }}"
{{ 'Matt Gibb, Red Cross' | translate }}
@@ -62,7 +62,7 @@ {{ 'Red Cross - Ayeyarwady Delta' | translate }}
{{ 'Tanzania Development Trust' | translate }}
- {{ '"Tanzania has a high incidence of extreme poverty, early marriage and Gender Based Violence. NGOs on the ground need better road and residential area data to facilitate their outreach work. Community mappers from a HOT microgrant, together with YouthMappers from the Institute of Rural Development Planning will map employment opportunities as part of a project to reduce youth vulnerability starting on 26th August. This base map will assist with this field mapping."' | translate }}
+
"{{ 'Tanzania has a high incidence of extreme poverty, early marriage and Gender Based Violence. NGOs on the ground need better road and residential area data to facilitate their outreach work. Community mappers from a HOT microgrant, together with YouthMappers from the Institute of Rural Development Planning will map employment opportunities as part of a project to reduce youth vulnerability starting on 26th August. This base map will assist with this field mapping.' | translate }}"
{{ 'Janet Chapman, Tanzania Development Trust' | translate }}
@@ -73,7 +73,7 @@ {{ 'Tanzania Development Trust' | translate }}
{{ 'Ongoing Disaster Mapping' | translate }}
- {{ '"With our disaster mapping program, what we are trying to provide is a common operating picture for the first responders, aid organizations, governments and the affected people to make informed decisions. When all parties are working with the same information, the better situated the community is for quick and effective recovery."' | translate }}
+
"{{ 'With our disaster mapping program, what we are trying to provide is a common operating picture for the first responders, aid organizations, governments and the affected people to make informed decisions. When all parties are working with the same information, the better situated the community is for quick and effective recovery.' | translate }}"
{{ 'Russell Deffner, Humanitarian OpenStreetMap Team' | translate }}
diff --git a/client/locale/en.json b/client/locale/en.json
index f9353e8ac2..86cc49902a 100644
--- a/client/locale/en.json
+++ b/client/locale/en.json
@@ -1,19 +1,22 @@
{
+ "": "",
+ " If checked, only users with the experience level of Intermediate and Advanced will be able to validate tasks in this project.": " If checked, only users with the experience level of Intermediate and Advanced will be able to validate tasks in this project.",
" Mark as Bad Imagery": " Mark as Bad Imagery",
" Mark as Completely Mapped": " Mark as Completely Mapped",
" Split Task": " Split Task",
" Stop Mapping": " Stop Mapping",
+ " left": " left",
"% Mapped": "% Mapped",
"% Validated": "% Validated",
"A comment entered when you save your mapping to the OSM database. When saving your work, please leave the default comment but add what you actually mapped, for example: Added buildings and a residential road.": "A comment entered when you save your mapping to the OSM database. When saving your work, please leave the default comment but add what you actually mapped, for example: Added buildings and a residential road.",
"A description for the default locale": "A description for the default locale",
- "A few of the humanitarian efforts you can support through mapping.": "A few of the humanitarian efforts you can support through mapping.",
+ "A mapping type selection is missing.": "A mapping type selection is missing.",
"A name for the default locale": "A name for the default locale",
"A new project will be created with": "A new project will be created with",
"A short description for the default locale": "A short description for the default locale",
"A verification email was sent.": "A verification email was sent.",
+ "AOI geometry must be a valid MultiPolygon.": "AOI geometry must be a valid MultiPolygon.",
"About": "About",
- "About the OSM Tasking Manager": "About the OSM Tasking Manager",
"About the Tasking Manager": "About the Tasking Manager",
"Accept and continue": "Accept and continue",
"Accept imagery license": "Accept imagery license",
@@ -22,9 +25,9 @@
"Active": "Active",
"Active Mappers": "Active Mappers",
"Activity and Stats": "Activity and Stats",
- "Add Comment": "Add Comment",
"Add layer": "Add layer",
"Add user": "Add user",
+ "Add/edit contact details": "Add/edit contact details",
"Admin": "Admin",
"Administrator": "Administrator",
"Advanced": "Advanced",
@@ -38,23 +41,19 @@
"An error occurred when altering expert mode setting.": "An error occurred when altering expert mode setting.",
"An error occurred when setting the level.": "An error occurred when setting the level.",
"An error occurred when setting the role.": "An error occurred when setting the role.",
- "and help improve it.": "and help improve it.",
- "and open it in JOSM to see the task boundaries.": "and open it in JOSM to see the task boundaries.",
- "and open it in JOSM to see the task boundary.": "and open it in JOSM to see the task boundary.",
- "Anyone who can use a computer to draw lines and boxes or use a phone to swipe and tap, can meaningfully contribute to humanitarian mapping. If you have never mapped before and would like to help by digitizing imagery, tracing buildings and roads, we ask you to visit our Learn page, which will get you mapping in less than 30 minutes.": "Anyone who can use a computer to draw lines and boxes or use a phone to swipe and tap, can meaningfully contribute to humanitarian mapping. If you have never mapped before and would like to help by digitizing imagery, tracing buildings and roads, we ask you to visit our Learn page, which will get you mapping in less than 30 minutes.",
+ "An organisation tag is missing.": "An organisation tag is missing.",
"AoI as": "AoI as",
- "AOI geometry must be a valid MultiPolygon.": "AOI geometry must be a valid MultiPolygon.",
"Arbitrary Tasks": "Arbitrary Tasks",
+ "Archive": "Archive",
"Archived": "Archived",
- "are locked for validation by you.": "are locked for validation by you.",
- "are locked for validation.": "are locked for validation.",
- "are missing.": "are missing.",
+ "Are you sure you want to delete these messages? This cannot be undone": "Are you sure you want to delete these messages? This cannot be undone",
"Are you sure you want to delete this message?": "Are you sure you want to delete this message?",
"Are you sure you want to delete this project? You cannot undo deleting a project.": "Are you sure you want to delete this project? You cannot undo deleting a project.",
"Are you sure you want to invalidate all tasks in this project? You cannot undo this.": "Are you sure you want to invalidate all tasks in this project? You cannot undo this.",
"Are you sure you want to mark all bad imagery tasks in this project as ready? You cannot undo this.": "Are you sure you want to mark all bad imagery tasks in this project as ready? You cannot undo this.",
"Are you sure you want to mark all tasks in this project as mapped? You cannot undo this.": "Are you sure you want to mark all tasks in this project as mapped? You cannot undo this.",
"Are you sure you want to reset all tasks? You cannot undo this.": "Are you sure you want to reset all tasks? You cannot undo this.",
+ "Are you sure you want to transfer this project? You cannot undo transfering a project.": "Are you sure you want to transfer this project? You cannot undo transfering a project.",
"Are you sure you want to validate all tasks? You cannot undo this.": "Are you sure you want to validate all tasks? You cannot undo this.",
"Authorization failed.": "Authorization failed.",
"Authorization successful. Redirecting...": "Authorization successful. Redirecting...",
@@ -65,6 +64,7 @@
"Beginner": "Beginner",
"Beginner mapper": "Beginner mapper",
"Block user": "Block user",
+ "Broad categories for classifying mapping issues noted during validation": "Broad categories for classifying mapping issues noted during validation",
"Building mapping is the most needed and the most common type of mapping HOT and MissingMaps does. Using the OpenStreetMap web based editor called the iD editor, building mapping is fairly easy. This video will show you the basics of how to map buildings using the iD editor.": "Building mapping is the most needed and the most common type of mapping HOT and MissingMaps does. Using the OpenStreetMap web based editor called the iD editor, building mapping is fairly easy. This video will show you the basics of how to map buildings using the iD editor.",
"Buildings": "Buildings",
"Campaign": "Campaign",
@@ -73,15 +73,9 @@
"Causes You Can Help": "Causes You Can Help",
"Changeset Comment": "Changeset Comment",
"Changeset comment": "Changeset comment",
- "characters remaining": "characters remaining",
"Choose a task": "Choose a task",
"Choose a task for mapping:": "Choose a task for mapping:",
- "choose default locale": "choose default locale",
- "choose from existing tags or create a new one": "choose from existing tags or create a new one",
- "choose locale": "choose locale",
- "choose mapping level": "choose mapping level",
- "Choose one or more tasks for validation:": "Choose one or more tasks for validation:",
- "choose results view": "choose results view",
+ "Choose two entries for diff or same once twice for attic data": "Choose two entries for diff or same once twice for attic data",
"Clear all": "Clear all",
"Clip tasks to Area of Interest": "Clip tasks to Area of Interest",
"Clone": "Clone",
@@ -89,20 +83,22 @@
"Close": "Close",
"Close message": "Close message",
"Comment": "Comment",
- "Comment left by": "Comment left by",
"Commented": "Commented",
"Comments by users": "Comments by users",
+ "Community": "Community",
"Contact Information": "Contact Information",
+ "Contact Us": "Contact Us",
"Contact project manager": "Contact project manager",
- "Contact us via the About page.": "Contact us via the About page.",
+ "Contact with JOSM Failed": "Contact with JOSM Failed",
"Contribute": "Contribute",
"Contributions": "Contributions",
"Contributor": "Contributor",
"Contributors were messaged successfully.": "Contributors were messaged successfully.",
"Create": "Create",
"Create a new project": "Create a new project",
- "Create new license": "Create new license",
"Create new Project": "Create new Project",
+ "Create new category": "Create new category",
+ "Create new license": "Create new license",
"Create project": "Create project",
"Created": "Created",
"Created by:": "Created by:",
@@ -110,16 +106,19 @@
"Default comments added to uploaded changeset comment field. Users should also be encouraged to add text describing what they mapped. Example: #hotosm-project-470 #missingmaps Buildings mapping. Hashtags are sometimes used for analysis later, but should be human informative and not overused, #group #event for example.": "Default comments added to uploaded changeset comment field. Users should also be encouraged to add text describing what they mapped. Example: #hotosm-project-470 #missingmaps Buildings mapping. Hashtags are sometimes used for analysis later, but should be human informative and not overused, #group #event for example.",
"Default locale": "Default locale",
"Delete": "Delete",
+ "Delete All Selected Messages": "Delete All Selected Messages",
+ "Delete Selected": "Delete Selected",
"Delete message": "Delete message",
"Delete project": "Delete project",
+ "Delete selected messages": "Delete selected messages",
"Description": "Description",
"Detailed Instructions": "Detailed Instructions",
"Details": "Details",
"Difficulty": "Difficulty",
"Dismiss": "Dismiss",
"Dismiss alert": "Dismiss alert",
+ "Done editing? Leave a comment and select one of the options below that matches your editing status.": "Done editing? Leave a comment and select one of the options below that matches your editing status.",
"Download": "Download",
- "Download the": "Download the",
"Download:": "Download:",
"Draft": "Draft",
"Draw": "Draw",
@@ -127,19 +126,24 @@
"Draw polygon": "Draw polygon",
"Draw rectangle": "Draw rectangle",
"Draw the Area of Interest on the map.": "Draw the Area of Interest on the map.",
- "During disaster preparation, response and recovery, detailed geospatial information, maps of roads, buildings, bridges, etc., is critical to delivering the best service and support in the most timely and efficient way possible. Unfortunately, this kind of information does not exist or is not open and accessible for large parts of the world. Through coordinated, remote satellite or UAV imagery based mapping and a close working partnership with people on the ground you can help provide that data where and when it is needed.": "During disaster preparation, response and recovery, detailed geospatial information, maps of roads, buildings, bridges, etc., is critical to delivering the best service and support in the most timely and efficient way possible. Unfortunately, this kind of information does not exist or is not open and accessible for large parts of the world. Through coordinated, remote satellite or UAV imagery based mapping and a close working partnership with people on the ground you can help provide that data where and when it is needed.",
"Edit": "Edit",
+ "Edit License": "Edit License",
+ "Edit Mapping-issue Category": "Edit Mapping-issue Category",
"Edit description": "Edit description",
"Edit imagery": "Edit imagery",
"Edit instructions": "Edit instructions",
- "Edit License": "Edit License",
"Edit permissions": "Edit permissions",
"Edit priority areas": "Edit priority areas",
"Edit project": "Edit project",
"Edit settings": "Edit settings",
"Edit tags": "Edit tags",
+ "Editors for mapping": "Editors for mapping",
+ "Editors for validation": "Editors for validation",
+ "Email (only visible to you):": "Email (only visible to you):",
"Email verification": "Email verification",
+ "Enter a name for the category": "Enter a name for the category",
"Enter a name for the license (provider for example)": "Enter a name for the license (provider for example)",
+ "Enter a short description of the category": "Enter a short description of the category",
"Enter a short version of the terms": "Enter a short version of the terms",
"Enter a username": "Enter a username",
"Enter the license terms": "Enter the license terms",
@@ -154,31 +158,37 @@
"Expert Mode": "Expert Mode",
"Expert mode makes advanced and experimental features available. Most users should leave this off.": "Expert mode makes advanced and experimental features available. Most users should leave this off.",
"Extra Instructions": "Extra Instructions",
+ "Failed to archive/unarchive category. Please try again.": "Failed to archive/unarchive category. Please try again.",
+ "Failed to create a new category. Please try again.": "Failed to create a new category. Please try again.",
"Failed to create a new license. Please try again.": "Failed to create a new license. Please try again.",
+ "Failed to delete category. Note that categories cannot be deleted once in use, but must be archived instead": "Failed to delete category. Note that categories cannot be deleted once in use, but must be archived instead",
"Failed to delete license. Please try again.": "Failed to delete license. Please try again.",
"Failed to mark all task valid for an unknown reason.": "Failed to mark all task valid for an unknown reason.",
"Failed to message all contributors for an unknown reason.": "Failed to message all contributors for an unknown reason.",
"Failed to reset all tasks for an unknown reason.": "Failed to reset all tasks for an unknown reason.",
"Failed to save edits. Please try again.": "Failed to save edits. Please try again.",
- "Field stories": "Field stories",
- "file": "file",
+ "Field Papers": "Field Papers",
"Filter": "Filter",
"Filter projects (on name, campaign, ...)": "Filter projects (on name, campaign, ...)",
+ "Find Ayeyarwady Delta Projects": "Find Ayeyarwady Delta Projects",
+ "Find New Disaster Mapping Projects": "Find New Disaster Mapping Projects",
+ "Find Tanzania Development Trust Projects": "Find Tanzania Development Trust Projects",
"Find a task for validation through one of the options below.": "Find a task for validation through one of the options below.",
+ "Fixed Mapping Issues": "Fixed Mapping Issues",
"For help with mapping or mapping related questions, please email: ": "For help with mapping or mapping related questions, please email: ",
- "Fork the Tasking Manager Code on GitHub": "Fork the Tasking Manager Code on GitHub",
"Frequently Asked Questions": "Frequently Asked Questions",
"From": "From",
"General questions or comments about Humanitarian OpenStreetMap Team, please email: ": "General questions or comments about Humanitarian OpenStreetMap Team, please email: ",
"General task size:": "General task size:",
"Get in touch": "Get in touch",
+ "Get started by choosing your editor of choice.": "Get started by choosing your editor of choice.",
"GitHub": "GitHub",
"Give feedback on": "Give feedback on",
+ "Go back to category overview": "Go back to category overview",
"Go back to license overview": "Go back to license overview",
"Go to MapSwipe": "Go to MapSwipe",
"Go to project": "Go to project",
"Go to the chat tab": "Go to the chat tab",
- "Go to the description tab": "Go to the description tab",
"Go to the homepage": "Go to the homepage",
"Go to the instructions tab": "Go to the instructions tab",
"Go to the mapping tab": "Go to the mapping tab",
@@ -186,20 +196,19 @@
"Grid view": "Grid view",
"High": "High",
"History": "History",
- "HOT Tasking Manager": "HOT Tasking Manager",
"How to map Buildings": "How to map Buildings",
"How to map Roads": "How to map Roads",
- "How you can help": "How you can help",
- "If checked, only users with the listed mapper experience level will be able to contribute to this project. If unchecked, anyone can contribute. Go to the Metadata panel to change the mapper experience level for this project.": "If checked, only users with the listed mapper experience level will be able to contribute to this project. If unchecked, anyone can contribute. Go to the Metadata panel to change the mapper experience level for this project.",
"If checked, only users with the Validator role will be able to validate tasks in this project. If unchecked, anyone can validate or invalidate tasks.": "If checked, only users with the Validator role will be able to validate tasks in this project. If unchecked, anyone can validate or invalidate tasks.",
- "If you are returning and ready to start mapping, please visit the Contribute page. You will see a list of mapping projects that need someone just like you to help get them done. You can select the Filter tab and narrow down the projects that you most want to work on. Your profile page has a list and quick link to projects you have already taken part in.": "If you are returning and ready to start mapping, please visit the Contribute page. You will see a list of mapping projects that need someone just like you to help get them done. You can select the Filter tab and narrow down the projects that you most want to work on. Your profile page has a list and quick link to projects you have already taken part in.",
+ "If checked, only users with the listed mapper experience level will be able to contribute to this project. If unchecked, anyone can contribute. Go to the Metadata panel to change the mapper experience level for this project.": "If checked, only users with the listed mapper experience level will be able to contribute to this project. If unchecked, anyone can contribute. Go to the Metadata panel to change the mapper experience level for this project.",
"If you have never mapped before and would like to help, visit our Learn page to get started mapping in less than 30 minutes.": "If you have never mapped before and would like to help, visit our Learn page to get started mapping in less than 30 minutes.",
"If you want mappers to work on the highest priority areas first, draw one of more polygons within the project area.": "If you want mappers to work on the highest priority areas first, draw one of more polygons within the project area.",
"Imagery": "Imagery",
"Import": "Import",
- "Import a GeoJSON, KML, or zipped SHP file.": "Import a GeoJSON, KML, or zipped SHP file.",
+ "Import a GeoJSON, KML, OSM or zipped SHP file.": "Import a GeoJSON, KML, OSM or zipped SHP file.",
"In order to make full use of the many features in the Tasking Manager, please use a desktop or laptop computer rather than a mobile device. If you would like to contribute on a mobile device, please use MapSwipe instead.": "In order to make full use of the many features in the Tasking Manager, please use a desktop or laptop computer rather than a mobile device. If you would like to contribute on a mobile device, please use MapSwipe instead.",
+ "In order to start contributing, please": "In order to start contributing, please",
"In this area": "In this area",
+ "Include Archived": "Include Archived",
"Include archived projects": "Include archived projects",
"Include draft projects": "Include draft projects",
"Instructions": "Instructions",
@@ -210,20 +219,21 @@
"Invalid project. Please select another project.": "Invalid project. Please select another project.",
"Invalidate all tasks": "Invalidate all tasks",
"Invalidated": "Invalidated",
- "Invalidated by": "Invalidated by",
"Invalidating all the tasks failed for an unknown reason.": "Invalidating all the tasks failed for an unknown reason.",
"Invalidating...": "Invalidating...",
- "is missing.": "is missing.",
"It is recommended to keep the size of the tasks small. Please review the size of the tasks and/or consider creating multiple projects.": "It is recommended to keep the size of the tasks small. Please review the size of the tasks and/or consider creating multiple projects.",
- "It is very easy to get started mapping in OpenStreetMap and contribute to HOT projects. People around the world rely on OpenStreetMap data contributed by millions of people over the past 10 years. While it is easy to get started, it does take some effort and practice to do well. If this is your first time mapping, please take about 30 mins to watch the video (in English with multi-language subtitles) to learn the basics of how to map using the OSM web browser based editor called iD. Please, now and in the future, always focus on quality, not quantity of mapping you do.": "It is very easy to get started mapping in OpenStreetMap and contribute to HOT projects. People around the world rely on OpenStreetMap data contributed by millions of people over the past 10 years. While it is easy to get started, it does take some effort and practice to do well. If this is your first time mapping, please take about 30 mins to watch the video (in English with multi-language subtitles) to learn the basics of how to map using the OSM web browser based editor called iD. Please, now and in the future, always focus on quality, not quantity of mapping you do.",
- "Joined OSM": "Joined OSM",
+ "JOSM": "JOSM",
"JOSM had a problem loading the project imagery.": "JOSM had a problem loading the project imagery.",
"JOSM remote control did not respond. Do you have JOSM running and configured to be controlled remotely?": "JOSM remote control did not respond. Do you have JOSM running and configured to be controlled remotely?",
+ "Janet Chapman, Tanzania Development Trust": "Janet Chapman, Tanzania Development Trust",
+ "Join coordinated humanitarian mapping projects by taking a task and mapping a part of the world in": "Join coordinated humanitarian mapping projects by taking a task and mapping a part of the world in",
+ "Joined OSM": "Joined OSM",
+ "Keep up the validation! We need experts like you to help!": "Keep up the validation! We need experts like you to help!",
"Land use": "Land use",
"Landuse": "Landuse",
"Larger": "Larger",
- "Last activity": "Last activity",
"Last Updated": "Last Updated",
+ "Last activity": "Last activity",
"Last updated": "Last updated",
"Last validation": "Last validation",
"Layer name": "Layer name",
@@ -235,49 +245,48 @@
"Legend": "Legend",
"Level": "Level",
"Licenses": "Licenses",
- "List view": "List view",
"Loading...": "Loading...",
"Lock": "Lock",
"Locked": "Locked",
"Locked by": "Locked by",
"Locked by you": "Locked by you",
"Locked for mapping": "Locked for mapping",
- "Locked for mapping by": "Locked for mapping by",
"Locked for validation": "Locked for validation",
- "Locked for validation by": "Locked for validation by",
"Login": "Login",
"Logout": "Logout",
"Low": "Low",
+ "Made by the": "Made by the",
+ "Manage issues": "Manage issues",
"Manage licenses": "Manage licenses",
+ "Manage mapping-issue categories": "Manage mapping-issue categories",
"Manually set the experience level of a user.": "Manually set the experience level of a user.",
"Map": "Map",
"Map a Task for People in Need": "Map a Task for People in Need",
"Map all tasks": "Map all tasks",
- "Map service type": "Map service type",
"Map service URL": "Map service URL",
+ "Map service type": "Map service type",
"Map view": "Map view",
"Mapped": "Mapped",
- "Mapped by": "Mapped by",
"Mapper": "Mapper",
- "Mapper level": "Mapper level",
"Mapper Level": "Mapper Level",
+ "Mapper level": "Mapper level",
"Mapper level required": "Mapper level required",
+ "Mappers": "Mappers",
+ "Mappers Online": "Mappers Online",
"Mapping": "Mapping",
"Mapping all the tasks failed for an unknown reason.": "Mapping all the tasks failed for an unknown reason.",
"Mapping difficulty": "Mapping difficulty",
"Mapping level": "Mapping level",
"Mapping, Validation and Invalidation": "Mapping, Validation and Invalidation",
+ "Mapping-issue Categories": "Mapping-issue Categories",
"Mapping...": "Mapping...",
"Mark all as Invalid": "Mark all as Invalid",
"Mark all as Valid": "Mark all as Valid",
- "Mark as Bad Imagery": "Mark as Bad Imagery",
- "Mark as Completely Mapped": "Mark as Completely Mapped",
"Mark as Invalid": "Mark as Invalid",
"Mark as Valid": "Mark as Valid",
"Marked as bad imagery": "Marked as bad imagery",
- "Marked as bad imagery by": "Marked as bad imagery by",
"Marked as ready": "Marked as ready",
- "Marked as ready by": "Marked as ready by",
+ "Matt Gibb, Red Cross": "Matt Gibb, Red Cross",
"Maximum number of tasks reached. If smaller tasks are required please make the Area of Interest smaller.": "Maximum number of tasks reached. If smaller tasks are required please make the Area of Interest smaller.",
"Medium": "Medium",
"Message": "Message",
@@ -286,42 +295,48 @@
"Messages - Inbox": "Messages - Inbox",
"Metadata": "Metadata",
"Metadata and tags are used to allow users to find projects to work on and group projects.": "Metadata and tags are used to allow users to find projects to work on and group projects.",
- "minutes left": "minutes left",
"Missing Maps Badges": "Missing Maps Badges",
- "Multi Task Validation": "Multi Task Validation",
"N/A": "N/A",
"Name": "Name",
"Name of the project": "Name of the project",
"Navigate the results": "Navigate the results",
- "New features in the Tasking Manager": "New features in the Tasking Manager",
"New project": "New project",
- "New to mapping?": "New to mapping?",
"Newer": "Newer",
- "Newest": "Newest",
"Next": "Next",
"No": "No",
+ "No Area of Interest has been drawn.": "No Area of Interest has been drawn.",
"No active projects.": "No active projects.",
"No activity (yet).": "No activity (yet).",
"No archived projects.": "No archived projects.",
- "No Area of Interest has been drawn.": "No Area of Interest has been drawn.",
+ "No category found.": "No category found.",
"No comments (yet).": "No comments (yet).",
"No contributions (yet).": "No contributions (yet).",
"No contributions to projects (yet).": "No contributions to projects (yet).",
"No draft projects.": "No draft projects.",
- "no license": "no license",
"No license found.": "No license found.",
+ "No messages": "No messages",
"No project discussion yet": "No project discussion yet",
"No projects found.": "No projects found.",
"Not a valid email address": "Not a valid email address",
+ "Note Mapping Issues (optional)": "Note Mapping Issues (optional)",
+ "Note an issue (space to see options)": "Note an issue (space to see options)",
"Note: follow this format for TMS URLs:": "Note: follow this format for TMS URLs:",
+ "Noted Mapping Issues": "Noted Mapping Issues",
"Nothing has happened yet.": "Nothing has happened yet.",
"Number of tasks mapped": "Number of tasks mapped",
"Number of tasks validated": "Number of tasks validated",
+ "OSM changeset(s) to advanced mapper": "OSM changeset(s) to advanced mapper",
+ "OSM changeset(s) to intermediate mapper": "OSM changeset(s) to intermediate mapper",
+ "OSM changesets to advanced mapper": "OSM changesets to advanced mapper",
+ "OSM edit history": "OSM edit history",
+ "OSM heat map": "OSM heat map",
+ "OSM profile": "OSM profile",
+ "OSMCha Filter Id": "OSMCha Filter Id",
"Older": "Older",
- "Only mappers with level": "Only mappers with level",
+ "Ongoing Disaster Mapping": "Ongoing Disaster Mapping",
+ "Only mappers with experience level": "Only mappers with experience level",
"Only one campaign tag is allowed.": "Only one campaign tag is allowed.",
"Only one organisation tag is allowed.": "Only one organisation tag is allowed.",
- "Only Validators can validate on this project": "Only Validators can validate on this project",
"Open Source": "Open Source",
"OpenStreetMap is a community-driven project to create a free and editable map of the world. Before you can contribute to HOT or Missing Maps projects you will need to create an OpenStreetMap user account, which is what you will use to login to the Tasking Manager. If you are concerned about privacy you should select an OSM username that is not related to your real name or your other online activities.": "OpenStreetMap is a community-driven project to create a free and editable map of the world. Before you can contribute to HOT or Missing Maps projects you will need to create an OpenStreetMap user account, which is what you will use to login to the Tasking Manager. If you are concerned about privacy you should select an OSM username that is not related to your real name or your other online activities.",
"Option 1:": "Option 1:",
@@ -329,74 +344,69 @@
"Option 3:": "Option 3:",
"Option 4:": "Option 4:",
"Option 5:": "Option 5:",
+ "Optional id of a saved OSMCha filter to apply when viewing the project in OSMCha, if you desire custom filtering. Note that this replaces all standard filters. Example: 095e8b31-b3cb-4b36-a106-02826fb6a109 (for convenience, you can also paste an OSMCha URL here that uses a saved filter and the filter id will be extracted for you).": "Optional id of a saved OSMCha filter to apply when viewing the project in OSMCha, if you desire custom filtering. Note that this replaces all standard filters. Example: 095e8b31-b3cb-4b36-a106-02826fb6a109 (for convenience, you can also paste an OSMCha URL here that uses a saved filter and the filter id will be extracted for you).",
"Options": "Options",
- "or higher can map": "or higher can map",
"Organisation": "Organisation",
"Organisation Tag": "Organisation Tag",
"Organization": "Organization",
- "OSM changeset(s) to advanced mapper": "OSM changeset(s) to advanced mapper",
- "OSM changeset(s) to intermediate mapper": "OSM changeset(s) to intermediate mapper",
- "OSM changesets to advanced mapper": "OSM changesets to advanced mapper",
- "OSM edit history": "OSM edit history",
- "OSM heat map": "OSM heat map",
- "OSM profile": "OSM profile",
- "OSM Tasking Manager is a mapping tool designed and built for the Humanitarian OSM Team collaborative mapping.": "OSM Tasking Manager is a mapping tool designed and built for the Humanitarian OSM Team collaborative mapping.",
"Other": "Other",
- "Other options": "Other options",
"Other Users": "Other Users",
+ "Other options": "Other options",
"Page Not Found": "Page Not Found",
"Participants": "Participants",
"Per Task Instructions": "Per Task Instructions",
"Permissions": "Permissions",
"Plain text": "Plain text",
+ "Please enter a valid username": "Please enter a valid username",
"Please get started by creating a new OpenStreetMap account.": "Please get started by creating a new OpenStreetMap account.",
"Please login first.": "Please login first.",
- "Please login to start mapping.": "Please login to start mapping.",
"Please login to start validating.": "Please login to start validating.",
"Please make sure you only have one campaign tag.": "Please make sure you only have one campaign tag.",
"Please make sure you only have one organisation tag.": "Please make sure you only have one organisation tag.",
"Please provide a valid GeoJSON, KML or zipped Shapefile.": "Please provide a valid GeoJSON, KML or zipped Shapefile.",
+ "Please provide an email address to receive notifications about your mapping": "Please provide an email address to receive notifications about your mapping",
+ "Potlatch 2": "Potlatch 2",
"Preview": "Preview",
"Preview Task on OSM": "Preview Task on OSM",
"Previous": "Previous",
"Priority": "Priority",
"Priority area": "Priority area",
- "priority area drawing tools": "priority area drawing tools",
"Priority areas": "Priority areas",
- "priority areas": "priority areas",
"Private": "Private",
- "Private means that only the given list of users below can access this project. Before a user name can be added to the Allowed Users list the user must first login to this installation of OSM Tasking Manager.": "Private means that only the given list of users below can access this project. Before a user name can be added to the Allowed Users list the user must first login to this installation of OSM Tasking Manager.",
- "Private means that only the given list of users below can access this project. In order for the users name to be available to add to the Allowed Users list - they first must visit the URL for this installation of OSM Tasking Manager and Authorize access to their OpenStreetMap account. After they have done this, their username will be available for the Project Manager to add.": "Private means that only the given list of users below can access this project. In order for the users name to be available to add to the Allowed Users list - they first must visit the URL for this installation of OSM Tasking Manager and Authorize access to their OpenStreetMap account. After they have done this, their username will be available for the Project Manager to add.",
"Private Project": "Private Project",
+ "Private means that only the given list of users below can access this project. Before a user name can be added to the Allowed Users list the user must first login to this installation of OSM Tasking Manager.": "Private means that only the given list of users below can access this project. Before a user name can be added to the Allowed Users list the user must first login to this installation of OSM Tasking Manager.",
"Progress": "Progress",
"Project Cluster": "Project Cluster",
- "Project could not be created. The exact reason could not be determined.": "Project could not be created. The exact reason could not be determined.",
"Project Dashboard": "Project Dashboard",
+ "Project Manager": "Project Manager",
+ "Project Questions and Comments": "Project Questions and Comments",
+ "Project could not be created. The exact reason could not be determined.": "Project could not be created. The exact reason could not be determined.",
"Project dashboard": "Project dashboard",
"Project grid could not be trimmed to the AOI.": "Project grid could not be trimmed to the AOI.",
"Project has": "Project has",
- "Project Manager": "Project Manager",
"Project name": "Project name",
- "Project Questions and Comments": "Project Questions and Comments",
"Project wide actions": "Project wide actions",
"Projects": "Projects",
"Published": "Published",
+ "Put here anything that can be useful to users while taking a task. If you have added extra properties within the GeoJSON of the task, they can be referenced by surrounding them in curly braces. For eg. if you have a property called `import_url` in your GeoJSON, you can reference it like:": "Put here anything that can be useful to users while taking a task. If you have added extra properties within the GeoJSON of the task, they can be referenced by surrounding them in curly braces. For eg. if you have a property called `import_url` in your GeoJSON, you can reference it like:",
"Questions and Comments": "Questions and Comments",
- "read more in the what is new section.": "read more in the what is new section.",
"Ready": "Ready",
"Ready to get mapping?": "Ready to get mapping?",
"Receive automated validation messages": "Receive automated validation messages",
+ "Red Cross - Ayeyarwady Delta": "Red Cross - Ayeyarwady Delta",
"Registered": "Registered",
- "Remove privileges": "Remove privileges",
+ "Require experience level INTERMEDIATE or ADVANCED": "Require experience level INTERMEDIATE or ADVANCED",
+ "Require users to be validators": "Require users to be validators",
"Required": "Required",
"Required license": "Required license",
"Reselect tasks locked for mapping ": "Reselect tasks locked for mapping ",
"Reselect tasks locked for validation ": "Reselect tasks locked for validation ",
+ "Resend validation email": "Resend validation email",
"Reset": "Reset",
+ "Reset Bad Imagery Tasks": "Reset Bad Imagery Tasks",
"Reset all bad imagery tasks": "Reset all bad imagery tasks",
"Reset all tasks": "Reset all tasks",
"Reset all tasks in the project to ready to map, preserving history.": "Reset all tasks in the project to ready to map, preserving history.",
- "Reset Bad Imagery Tasks": "Reset Bad Imagery Tasks",
"Reset tasks": "Reset tasks",
"Resetting all the bad imagery tasks failed for an unknown reason.": "Resetting all the bad imagery tasks failed for an unknown reason.",
"Resetting...": "Resetting...",
@@ -407,27 +417,25 @@
"Road mapping is the next most common type of mapping for HOT and MissingMaps does. Physically mapping roads is very easy, but deciding how to classifiy them is the real challenge. This video will give you basics of how to map roads using the iD editor.": "Road mapping is the next most common type of mapping for HOT and MissingMaps does. Physically mapping roads is very easy, but deciding how to classifiy them is the real challenge. This video will give you basics of how to map roads using the iD editor.",
"Roads": "Roads",
"Role": "Role",
+ "Russell Deffner, Humanitarian OpenStreetMap Team": "Russell Deffner, Humanitarian OpenStreetMap Team",
"Save": "Save",
"Save changes": "Save changes",
"Save edits": "Save edits",
"Search": "Search",
- "Search project description or project number": "Search project description or project number",
"Search Users": "Search Users",
+ "Search for username": "Search for username",
+ "Search project description or project number": "Search project description or project number",
"Seasoned mapper? Pick up one of our many projects and start contributing.": "Seasoned mapper? Pick up one of our many projects and start contributing.",
+ "See the changesets in OSMCha for this area.": "See the changesets in OSMCha for this area.",
+ "See the changesets in OSMCha for this project": "See the changesets in OSMCha for this project",
"See the changesets in Overpass Turbo for this area.": "See the changesets in Overpass Turbo for this area.",
"See the changesets on the OSM website for this area.": "See the changesets on the OSM website for this area.",
"Select a random task": "Select a random task",
"Select a task by clicking on the map": "Select a task by clicking on the map",
"Select another task": "Select another task",
"Select area by drawing a polygon": "Select area by drawing a polygon",
- "Select by area": "Select by area",
"Select by user below": "Select by user below",
- "Select by user:": "Select by user:",
- "Select for validation": "Select for validation",
"Sending...": "Sending...",
- "Set as Administrator": "Set as Administrator",
- "Set as Project Manager": "Set as Project Manager",
- "Set as Validator": "Set as Validator",
"Set mapper level": "Set mapper level",
"Set role": "Set role",
"Setting the level will help the mappers find suitable projects to work on. You can enforce the level required for mapping in the permissions section.": "Setting the level will help the mappers find suitable projects to work on. You can enforce the level required for mapping in the permissions section.",
@@ -437,7 +445,6 @@
"Show advanced options": "Show advanced options",
"Show/hide menu": "Show/hide menu",
"Sign Up for OpenStreetMap": "Sign Up for OpenStreetMap",
- "Since you have multiple tasks selected, you must download the OSM data in JOSM manually. Download the": "Since you have multiple tasks selected, you must download the OSM data in JOSM manually. Download the",
"Smaller": "Smaller",
"Something went wrong when verifying your email.": "Something went wrong when verifying your email.",
"Sort column": "Sort column",
@@ -449,9 +456,9 @@
"Square Grid": "Square Grid",
"Start": "Start",
"Start Editor": "Start Editor",
- "Start mapping": "Start mapping",
"Start Mapping": "Start Mapping",
"Start Validating": "Start Validating",
+ "Start mapping": "Start mapping",
"Stats": "Stats",
"Status": "Status",
"Status:": "Status:",
@@ -465,56 +472,52 @@
"Step 4: Trim Project": "Step 4: Trim Project",
"Step 5": "Step 5",
"Step 5: Review": "Step 5: Review",
- "Stop Mapping": "Stop Mapping",
"Stop Validating": "Stop Validating",
+ "Stop using JOSM": "Stop using JOSM",
"Subject": "Subject",
+ "Tanzania Development Trust": "Tanzania Development Trust",
+ "Tanzania has a high incidence of extreme poverty, early marriage and Gender Based Violence. NGOs on the ground need better road and residential area data to facilitate their outreach work. Community mappers from a HOT microgrant, together with YouthMappers from the Institute of Rural Development Planning will map employment opportunities as part of a project to reduce youth vulnerability starting on 26th August. This base map will assist with this field mapping.": "Tanzania has a high incidence of extreme poverty, early marriage and Gender Based Violence. NGOs on the ground need better road and residential area data to facilitate their outreach work. Community mappers from a HOT microgrant, together with YouthMappers from the Institute of Rural Development Planning will map employment opportunities as part of a project to reduce youth vulnerability starting on 26th August. This base map will assist with this field mapping.",
+ "Task": "Task",
+ "Task Link": "Task Link",
"Task automatically unlocked for mapping": "Task automatically unlocked for mapping",
"Task automatically unlocked for validation": "Task automatically unlocked for validation",
"Task could not be split": "Task could not be split",
"Task invalidated": "Task invalidated",
- "Task invalidated by": "Task invalidated by",
"Task invalidation": "Task invalidation",
"Task is not splittable": "Task is not splittable",
- "Task Link": "Task Link",
"Task locked for mapping": "Task locked for mapping",
- "Task locked for mapping by": "Task locked for mapping by",
"Task locked for validation": "Task locked for validation",
- "Task locked for validation by": "Task locked for validation by",
"Task mapped": "Task mapped",
- "Task mapped by": "Task mapped by",
"Task mapping": "Task mapping",
"Task marked as bad imagery": "Task marked as bad imagery",
- "Task marked as bad imagery by": "Task marked as bad imagery by",
"Task marked as ready": "Task marked as ready",
- "Task marked as ready by": "Task marked as ready by",
"Task reset": "Task reset",
"Task split": "Task split",
"Task validated": "Task validated",
- "Task validated by": "Task validated by",
"Task validation": "Task validation",
"Tasks": "Tasks",
- "Tasks as": "Tasks as",
"Tasks Mapped": "Tasks Mapped",
"Tasks Validated": "Tasks Validated",
- "tasks.": "tasks.",
- "tasks. Use a smaller AOI and/or fewer tasks.": "tasks. Use a smaller AOI and/or fewer tasks.",
- "Text search": "Text search",
+ "Tasks as": "Tasks as",
"Thank you for verifying your email.": "Thank you for verifying your email.",
"The AOI contains geometries which are not polygons or multipolygons": "The AOI contains geometries which are not polygons or multipolygons",
"The AOI contains self intersections": "The AOI contains self intersections",
- "The application code is available on GitHub.": "The application code is available on GitHub.",
"The Area of Interest contains self intersections.": "The Area of Interest contains self intersections.",
- "The list of elements we ask you to map": "The list of elements we ask you to map",
- "The list of entities to map.": "The list of entities to map.",
- "The OSM Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.": "The OSM Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.",
- "The OSM Tasking Manager is Open Source software. Please feel free to report issues and contribute.": "The OSM Tasking Manager is Open Source software. Please feel free to report issues and contribute.",
- "The OSM Tasking Manager was designed and built for the": "The OSM Tasking Manager was designed and built for the",
"The Project could not be created. This may be because the combined data size of the AOI and the grid is too large to send to the server. Try again with a smaller AOI or fewer tasks.": "The Project could not be created. This may be because the combined data size of the AOI and the grid is too large to send to the server. Try again with a smaller AOI or fewer tasks.",
"The Project could not be trimmed. This may be because the combined data size of the AOI and the grid is too large to send to the server. Try again with a smaller AOI or fewer tasks.": "The Project could not be trimmed. This may be because the combined data size of the AOI and the grid is too large to send to the server. Try again with a smaller AOI or fewer tasks.",
"The Project trim timed out. Try again with a smaller AOI or fewer tasks.": "The Project trim timed out. Try again with a smaller AOI or fewer tasks.",
+ "The Red Cross is mapping the Ayeyarwady Delta area in Myanmar as part of a multi-year mapping and data readiness activity to better understand where critical infrastructure and roads are to inform decision making during potential disasters. As recently as 2008 a cyclone killed at least 77,000 people with over 55,900 missing, and left about 2.5 million homeless.": "The Red Cross is mapping the Ayeyarwady Delta area in Myanmar as part of a multi-year mapping and data readiness activity to better understand where critical infrastructure and roads are to inform decision making during potential disasters. As recently as 2008 a cyclone killed at least 77,000 people with over 55,900 missing, and left about 2.5 million homeless.",
+ "The Tasking Manager is Open Source software. Please feel free to report issues and contribute.": "The Tasking Manager is Open Source software. Please feel free to report issues and contribute.",
+ "The Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process in OpenStreetMap. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.": "The Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process in OpenStreetMap. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.",
+ "The Tasking Manager is the tool / website you are using right now. Its main purpose is to divide up large areas that need mapping into small, easy to map Tasks. It organizes the small Tasks into a larger group called a Project. It provides a user interface to find a Project and then Check-Out and Check-In the small Tasks so you can map them in OpenStreetMap using one of the standard OpenStreetMap editors. Learning how to actually map is shown in the videos below.": "The Tasking Manager is the tool / website you are using right now. Its main purpose is to divide up large areas that need mapping into small, easy to map Tasks. It organizes the small Tasks into a larger group called a Project. It provides a user interface to find a Project and then Check-Out and Check-In the small Tasks so you can map them in OpenStreetMap using one of the standard OpenStreetMap editors. Learning how to actually map is shown in the videos below.",
+ "The Tasking Manager was designed and built for the": "The Tasking Manager was designed and built for the",
+ "The application code is available on GitHub.": "The application code is available on GitHub.",
+ "The list of elements we ask you to map": "The list of elements we ask you to map",
+ "The list of entities to map.": "The list of entities to map.",
"The project was deleted successfully.": "The project was deleted successfully.",
"The project was not deleted successfully. This project might have some contributions.": "The project was not deleted successfully. This project might have some contributions.",
- "The selected task could be locked.": "The selected task could be locked.",
+ "The project was not transfered successfully.": "The project was not transfered successfully.",
+ "The project was transfered successfully.": "The project was transfered successfully.",
"The selected task could not be locked.": "The selected task could not be locked.",
"The selected task is not in a state that allows mapping.": "The selected task is not in a state that allows mapping.",
"The selected task is not in a state that allows validation.": "The selected task is not in a state that allows validation.",
@@ -523,10 +526,6 @@
"The task could not be locked for mapping.": "The task could not be locked for mapping.",
"The task could not be locked for validation.": "The task could not be locked for validation.",
"The task expired and was automatically unlocked.": "The task expired and was automatically unlocked.",
- "The Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process in OpenStreetMap. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.": "The Tasking Manager is a mapping tool designed and built for the Humanitarian OpenStreetMap Team's collaborative mapping process in OpenStreetMap. The purpose of the tool is to divide up a mapping project into smaller tasks that can be completed rapidly with many people working on the same overall area. It shows which areas need to be mapped and which areas need the mapping validated.",
- "The Tasking Manager is Open Source software. Please feel free to report issues and contribute.": "The Tasking Manager is Open Source software. Please feel free to report issues and contribute.",
- "The Tasking Manager is the tool / website you are using right now. Its main purpose is to divide up large areas that need mapping into small, easy to map Tasks. It organizes the small Tasks into a larger group called a Project. It provides a user interface to find a Project and then Check-Out and Check-In the small Tasks so you can map them in OpenStreetMap using one of the standard OpenStreetMap editors. Learning how to actually map is shown in the videos below.": "The Tasking Manager is the tool / website you are using right now. Its main purpose is to divide up large areas that need mapping into small, easy to map Tasks. It organizes the small Tasks into a larger group called a Project. It provides a user interface to find a Project and then Check-Out and Check-In the small Tasks so you can map them in OpenStreetMap using one of the standard OpenStreetMap editors. Learning how to actually map is shown in the videos below.",
- "The Tasking Manager was designed and built for the": "The Tasking Manager was designed and built for the",
"The tasks could not be locked.": "The tasks could not be locked.",
"The tasks were invalidated successfully.": "The tasks were invalidated successfully.",
"The tasks were mapped successfully.": "The tasks were mapped successfully.",
@@ -534,7 +533,6 @@
"The tasks were reset successfully.": "The tasks were reset successfully.",
"There are no tasks currently available for mapping.": "There are no tasks currently available for mapping.",
"There are no tasks currently available for validation.": "There are no tasks currently available for validation.",
- "There was a problem commenting on the task.": "There was a problem commenting on the task.",
"There was a problem unlocking the task.": "There was a problem unlocking the task.",
"There was a problem unlocking the tasks.": "There was a problem unlocking the tasks.",
"There was an error retrieving the task from the server.": "There was an error retrieving the task from the server.",
@@ -542,7 +540,6 @@
"This approach allows the distribution of tasks to many individual mappers in the context of emergency or other humanitarian mapping scenario. It also allows monitoring of the overall project progress and helps improve the consistency of the mapping (e.g., elements to cover, specific tags to use, etc.).": "This approach allows the distribution of tasks to many individual mappers in the context of emergency or other humanitarian mapping scenario. It also allows monitoring of the overall project progress and helps improve the consistency of the mapping (e.g., elements to cover, specific tags to use, etc.).",
"This cannot be undone.": "This cannot be undone.",
"This message is not translated to the selected language of the user, so you may want to include your own translations.": "This message is not translated to the selected language of the user, so you may want to include your own translations.",
- "this task as a gpx file to see its boundary.": "this task as a gpx file to see its boundary.",
"This task is available for mapping.": "This task is available for mapping.",
"This task is available for validation.": "This task is available for validation.",
"This will clone all descriptions, instructions, metadata etc. The Area of Interest, the tasks and the priority areas will not be cloned. You will have to redraw/import these. Your newly cloned project will be in draft status.": "This will clone all descriptions, instructions, metadata etc. The Area of Interest, the tasks and the priority areas will not be cloned. You will have to redraw/import these. Your newly cloned project will be in draft status.",
@@ -552,11 +549,14 @@
"This will mark all tasks (except non completed and bad imagery tasks) as invalid. Please use this only if you are sure of what you are doing.": "This will mark all tasks (except non completed and bad imagery tasks) as invalid. Please use this only if you are sure of what you are doing.",
"This will reset all tasks to ready to map (preserving existing history). Please use this only if you are sure of what you are doing.": "This will reset all tasks to ready to map (preserving existing history). Please use this only if you are sure of what you are doing.",
"This will send a Tasking Manager message to every contributor of the current project. Please use this feature carefully.": "This will send a Tasking Manager message to every contributor of the current project. Please use this feature carefully.",
+ "Time Spent Mapping (on this instance)": "Time Spent Mapping (on this instance)",
"Tip": "Tip",
- "to convert it to GeoJSON.": "to convert it to GeoJSON.",
"Toggle the Area of Interest of existing projects": "Toggle the Area of Interest of existing projects",
- "Total number of users:": "Total number of users:",
+ "Total Mappers": "Total Mappers",
"Total OSM changesets": "Total OSM changesets",
+ "Total number of users:": "Total number of users:",
+ "Transfer": "Transfer",
+ "Transfer project": "Transfer project",
"Trim": "Trim",
"Trim failed with unexpected error status.": "Trim failed with unexpected error status.",
"Trim the task grid to the Area of Interest (optional). You can keep task squares complete, or clip them to the AOI. This could take some time.": "Trim the task grid to the Area of Interest (optional). You can keep task squares complete, or clip them to the AOI. This could take some time.",
@@ -564,58 +564,81 @@
"Type a message": "Type a message",
"Type a username": "Type a username",
"Type(s) of mapping": "Type(s) of mapping",
+ "URL to service": "URL to service",
"Un-Mark": "Un-Mark",
- "Unable to create project because there are more than": "Unable to create project because there are more than",
+ "Unarchive": "Unarchive",
"Urgent": "Urgent",
- "URL to service": "URL to service",
"Use this if for some reason you need to map, validate or invalidate all tasks in this project in a single step.": "Use this if for some reason you need to map, validate or invalidate all tasks in this project in a single step.",
- "Use this if for some reason you need to validate or invalidate all tasks in this project in a single step.": "Use this if for some reason you need to validate or invalidate all tasks in this project in a single step.",
"User": "User",
- "User list": "User list",
"User Profile": "User Profile",
- "user profile": "user profile",
+ "User list": "User list",
"Username": "Username",
"Users": "Users",
"Validate": "Validate",
"Validate a Random Task": "Validate a Random Task",
"Validate all tasks": "Validate all tasks",
"Validated": "Validated",
- "Validated by": "Validated by",
"Validating...": "Validating...",
"Validation": "Validation",
- "Validation and Invalidation": "Validation and Invalidation",
"Validation is a second set of eyes reviewing initial mapping. This is usually done by experienced OSM mappers and consists of reviewing the mapping for completeness (something anyone can do) and using various tools to make sure the mapping does not have any technical mistakes, buildings sharing a wall with a road for example. This video (in English with mult-language subtitles) will take you through the basics of validating mapping for HOT projects.": "Validation is a second set of eyes reviewing initial mapping. This is usually done by experienced OSM mappers and consists of reviewing the mapping for completeness (something anyone can do) and using various tools to make sure the mapping does not have any technical mistakes, buildings sharing a wall with a road for example. This video (in English with mult-language subtitles) will take you through the basics of validating mapping for HOT projects.",
"Validator": "Validator",
- "Validator Level": "Validator Level",
"Validator role required": "Validator role required",
- "View in Overpass Turbo": "View in Overpass Turbo",
+ "Validators": "Validators",
"View OSM changesets": "View OSM changesets",
+ "View in OSMCha": "View in OSMCha",
+ "View in Overpass Turbo": "View in Overpass Turbo",
"View the projects that you have created": "View the projects that you have created",
"Visit about": "Visit about",
- "Visit contribute": "Visit contribute",
"Visit homepage": "Visit homepage",
"Visit learn": "Visit learn",
"Want to become a sponsor? Contact us to learn how.": "Want to become a sponsor? Contact us to learn how.",
- "Want to use an .osm file instead? You can use": "Want to use an .osm file instead? You can use",
"Warning": "Warning",
"Waterways": "Waterways",
- "What is New in the Tasking Manager 3": "What is New in the Tasking Manager 3",
- "What is New?": "What is New?",
"When": "When",
+ "With our disaster mapping program, what we are trying to provide is a common operating picture for the first responders, aid organizations, governments and the affected people to make informed decisions. When all parties are working with the same information, the better situated the community is for quick and effective recovery.": "With our disaster mapping program, what we are trying to provide is a common operating picture for the first responders, aid organizations, governments and the affected people to make informed decisions. When all parties are working with the same information, the better situated the community is for quick and effective recovery.",
"With the invaluable support of:": "With the invaluable support of:",
"Yes": "Yes",
"You can only delete projects with no contributions.": "You can only delete projects with no contributions.",
"You can use Markdown. (HTML is not allowed)": "You can use Markdown. (HTML is not allowed)",
- "You cannot select tasks for mapping because you already have one or more tasks locked. Use the map to re-select that task and complete it or stop mapping it.": "You cannot select tasks for mapping because you already have one or more tasks locked. Use the map to re-select that task and complete it or stop mapping it.",
"You cannot select tasks for mapping because you already have task(s) locked.": "You cannot select tasks for mapping because you already have task(s) locked.",
"You cannot select tasks for mapping on this project because you do not have the required mapper experience level.": "You cannot select tasks for mapping on this project because you do not have the required mapper experience level.",
"You cannot select tasks for validation on this project because you do not have the Validator role.": "You cannot select tasks for validation on this project because you do not have the Validator role.",
"You do not have the required Validator role for validation on this project.": "You do not have the required Validator role for validation on this project.",
- "You have no messages.": "You have no messages.",
"You have unread messages.": "You have unread messages.",
+ "You need at least one mapping editor.": "You need at least one mapping editor.",
+ "You need at least one validation editor.": "You need at least one validation editor.",
"You need to accept the license before continuing.": "You need to accept the license before continuing.",
"You need to add at least one allowed user to a private project.": "You need to add at least one allowed user to a private project.",
+ "You're an advanced mapper! Next,": "You're an advanced mapper! Next,",
+ "You're on your way to becoming an advanced mapper!": "You're on your way to becoming an advanced mapper!",
+ "You're on your way to becoming an intermediate mapper!": "You're on your way to becoming an intermediate mapper!",
+ "You're over halfway to becoming an advanced mapper!": "You're over halfway to becoming an advanced mapper!",
+ "You're over halfway to becoming an intermediate mapper!": "You're over halfway to becoming an intermediate mapper!",
+ "You've almost reached advanced mapper!": "You've almost reached advanced mapper!",
+ "You've almost reached intermediate mapper!": "You've almost reached intermediate mapper!",
+ "You've made intermediate mapper, keep it up! ": "You've made intermediate mapper, keep it up! ",
"Your profile": "Your profile",
"Your project has been updated successfully.": "Your project has been updated successfully.",
- "Your project was created successfully.": "Your project was created successfully."
+ "Your project was created successfully.": "Your project was created successfully.",
+ "and support these communities in need.": "and support these communities in need.",
+ "are locked for validation.": "are locked for validation.",
+ "are missing.": "are missing.",
+ "characters remaining": "characters remaining",
+ "choose default locale": "choose default locale",
+ "choose from existing tags or create a new one": "choose from existing tags or create a new one",
+ "choose locale": "choose locale",
+ "choose mapping level": "choose mapping level",
+ "choose results view": "choose results view",
+ "iD Editor": "iD Editor",
+ "is missing.": "is missing.",
+ "learn how to validate!": "learn how to validate!",
+ "login first": "login first",
+ "mapper": "mapper",
+ "no license": "no license",
+ "or higher can map": "or higher can map",
+ "priority area drawing tools": "priority area drawing tools",
+ "priority areas": "priority areas",
+ "read more in the what is new section.": "read more in the what is new section.",
+ "tasks.": "tasks.",
+ "this task as a gpx file to see its boundary.": "this task as a gpx file to see its boundary."
}
diff --git a/devops/docker/tasking-manager/Dockerfile b/devops/docker/tasking-manager/Dockerfile
index bf5d734e35..7cfebda59a 100644
--- a/devops/docker/tasking-manager/Dockerfile
+++ b/devops/docker/tasking-manager/Dockerfile
@@ -12,7 +12,7 @@ RUN apt-get update \
# Upgrade pip
RUN pip install --upgrade pip
-ARG branch=develop
+ARG branch=feature/1678-translations
RUN git clone --depth=1 git://github.com/hotosm/tasking-manager.git \
--branch $branch /usr/src/app
diff --git a/docs/contributing-code.md b/docs/contributing-code.md
index 9ea4212dc5..67602fa565 100644
--- a/docs/contributing-code.md
+++ b/docs/contributing-code.md
@@ -11,6 +11,7 @@ All of the Tasking Manager development is going to happen in the [projects repos
2. Consider write tests when building the new frontend
3. Stick to pep8 python style guide for the backend
4. Apply JSLint style guide rules for the frontend code.
+5. Export translatable strings with `make refresh-translatables` and include them into your commit.
## Code collaboration and version control
@@ -59,5 +60,9 @@ other commits, namely:
For simple commits the one line summary is often enough and the body
of the commit message can be left out.
+In case you have introduced new strings on the frontend, the translation source file must be updated
+this can be done via `make refresh-translatables` or `python3 manage.py refresh_translatables`.
+Please make sure you run the commend and include the changes into your commit.
+
If you have forked this project on GitHub then the best way to submit your patches is to
push your changes back to your GitHub repository and then send a "pull request" via GitHub to the main repository.
diff --git a/docs/contributing-translation.md b/docs/contributing-translation.md
index 612739e007..65c8543bca 100644
--- a/docs/contributing-translation.md
+++ b/docs/contributing-translation.md
@@ -1,32 +1,50 @@
# Contributions to the localization
-The Tasking Manager is localised using the Transifex. Transifex is included in the requirements.txt so you should be
-able to use the Transifex commands once you have set up your server side code. The Tasking Manager is using Transifex's
-[CLI client](https://docs.transifex.com/client/introduction/). Commands are documented there.
+## Translators
-Tasking Manager is using Angular Translate to display the translated strings. It works with key/value pairs in .json
-format and this is also the format that is used to store the translations in Transifex.
+The Tasking Manager is localised using our [Transifex repository](https://www.transifex.com/hotosm/tasking-manager/dashboard/).
+This is super easy. If you are interested click yourself an account and apply to join the `hotosm-translator` team.
+Everybody is welcome to support translations through the Transifex website.
-Our [transifex repository](https://www.transifex.com/hotosm/tasking-manager-3/dashboard/).
+## Developers
+
+For developers Transifex offers a [CLI client](https://docs.transifex.com/client/introduction/) and the Tasking
+Manager is offering commands to interact with it. The client is already included in the requirements.txt so you should
+have the Transifex commands installed, once you have set up your server side code.
+
+The Tasking Manager is using Angular Translate to display the translated strings. It works with key/value pairs
+in .json format and this is also the format that is used to store the translations in Transifex.
### Setting up Transifex locally
-https://docs.transifex.com/client/init
-To use Transifex client, you'll need a Transifex account. In the project top level directory, initialize Transifex
-service: tx init. The init process will ask for service URL (leave the default suggestion by hitting enter) and your
-Transifex username/password.
+
+To [setup the Transifex client](https://docs.transifex.com/client/init), you'll need a Transifex account and API key.
+In the project top level directory, initialize Transifex service: tx init. The init process will ask for service URL
+(leave the default suggestion by hitting enter) and your Transifex username/password.
The .tx folder contains the Transifex config file. This is where you can find the mappings to local translation files.
-### Pushing translations
-Use Transifex's ```tx push -s -t``` to push all local changes to Transifex.
-* Argument ```-s``` pushes source files (English in our case)
-* Argument ```-t``` pushes all translation files
+### Extract strings for translation
+
+* ```make refresh-translatables``` - Collects translatable strings and moves them into `client/locale/en.json`.
+* Push to the `develop` branch and it will be automatically picked up by Transifex (twice a day).
+
+### Update with latest translations
-### Pulling translations
-Use Transifex's ```tx pull``` to get all translations from Transifex.
+* Before a release new translations need to be pulled in:
+* ```tx pull -af``` - Gets all translations from Transifex and puts them into `client/locale`.
### Adding a new language
+
In this example we are adding support for German.
+
* Add a new .json file with the appropriate language code as the name of the file, so in this case de.json.
-* Configure local mapping by using Transifex's set command: ```tx set -r tasking-manager-3.master -l de client/locale/de.json```
+* Configure local mapping by using Transifex's set command: ```tx set -r tasking-manager.master -l de client/locale/de.json```
* Add the new language and language code to the config file so it shows up in dropdowns etc. in server/config.py
+
+### Pushing translations
+
+You can also translate locally and push the
+Use Transifex's ```tx push -s -t``` to push all local changes to Transifex.
+
+* Argument ```-s``` pushes source files (English in our case)
+* Argument ```-t``` pushes all translation files
diff --git a/docs/setup-development.md b/docs/setup-development.md
index 42b49afc36..007e84bf1e 100644
--- a/docs/setup-development.md
+++ b/docs/setup-development.md
@@ -98,6 +98,13 @@ The project includes a suite of Unit and Integration tests that you should run a
python3 -m unittest discover tests/server
```
+#### Export translatable strings to en.json source file
+
+```
+python3 manage.py refresh_translatables
+```
+
+
### Database
#### Create a fresh database
diff --git a/manage.py b/manage.py
index ffb8275a82..fd8a3395a4 100644
--- a/manage.py
+++ b/manage.py
@@ -7,6 +7,7 @@
from server import create_app, init_counters
from server.services.users.authentication_service import AuthenticationService
from server.services.users.user_service import UserService
+from server.services.translation_service import TranslationService
import os
import warnings
@@ -55,5 +56,11 @@ def refresh_levels():
print(f'Updated {users_updated} user mapper levels')
+@manager.command
+def refresh_translatables():
+ print('Exporting translatable strings')
+ TranslationService.refresh_translatables()
+
+
if __name__ == '__main__':
manager.run()
diff --git a/requirements.txt b/requirements.txt
index 896c0a30ec..3c4d53763e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -19,6 +19,7 @@ flask-swagger==0.2.14
GeoAlchemy2==0.4.0
geojson==1.3.4
gevent==1.4.0
+glob2==0.7
greenlet==0.4.15
gunicorn==19.7.1
html5lib==0.999999999
diff --git a/server/services/translation_service.py b/server/services/translation_service.py
new file mode 100644
index 0000000000..4bea90462a
--- /dev/null
+++ b/server/services/translation_service.py
@@ -0,0 +1,58 @@
+import re
+import glob2
+
+
+class TranslationService:
+
+ @staticmethod
+ def refresh_translatables():
+ """
+ Read through frontend files and extract translatable strings
+ """
+
+ # Get translatable strings
+ strings = TranslationService._get_translatables()
+
+ # Replace english language file, which is the source for translation
+ output = open('client/locale/en.json', 'w')
+ output.write('{\n')
+ counter = len(strings)
+ for string in sorted(strings):
+ if counter > 1:
+ output.write('\t"%s": "%s",\n' % (string, string))
+ counter = counter - 1
+ else:
+ output.write('\t"%s": "%s"\n' % (string, string))
+ output.write('}\n')
+ output.close()
+
+ @staticmethod
+ def _get_translatables():
+
+ # Source files containing translation strings
+ files = glob2.glob('client/app/**')
+ files.append('client/index.html')
+
+ # Regular expression to detect translation strings
+ translate_string = re.compile('\{\{\s+[\'\"]([^\|]*)[\'\"]\s+\|\s+translate\s+\}\}')
+
+ # Assemble the data
+ strings = []
+ for f in files:
+
+ # Read in frontend files
+ try:
+ text = open(f, 'r').readlines()
+ except Exception:
+ continue
+ for line in text:
+
+ # Identify translation string
+ matches = translate_string.findall(line)
+ if len(matches) > 0:
+
+ # Add translation string to strings array
+ for match in matches:
+ if match not in strings:
+ strings.append(match)
+ return strings
diff --git a/tests/server/unit/services/test_translation_service.py b/tests/server/unit/services/test_translation_service.py
new file mode 100644
index 0000000000..96235bd765
--- /dev/null
+++ b/tests/server/unit/services/test_translation_service.py
@@ -0,0 +1,40 @@
+import unittest
+from server.services.translation_service import TranslationService
+
+
+class TestTranslationService(unittest.TestCase):
+
+ def test_translation_source_file_contains_all_translatables(self):
+ # Arrange
+
+ # Read the strings from language file
+ current_file = open('client/locale/en.json', 'r')
+ current_strings = current_file.readlines()[1:-1]
+ current_file.close()
+
+ # Get translatables from code base
+ translatables_raw = TranslationService._get_translatables()
+ translatables = []
+ counter = len(translatables_raw)
+ for string in sorted(translatables_raw):
+ if counter > 1:
+ translatables.append('\t"%s": "%s",\n' % (string, string))
+ counter = counter - 1
+ else:
+ translatables.append('\t"%s": "%s"\n' % (string, string))
+
+ # Act
+
+ # Compare strings between current and new code base
+ count_new_strings = 0
+ count_removed_strings = 0
+ for word in translatables:
+ if word not in current_strings:
+ count_new_strings += 1
+ for word in current_strings:
+ if word not in translatables:
+ count_removed_strings += 1
+
+ # Assert
+ self.assertEqual(count_removed_strings, 0)
+ self.assertEqual(count_new_strings, 0)