diff --git a/includes/i18n/de-DE/access_denied.po b/includes/i18n/de-DE/access_denied.po
new file mode 100644
index 00000000..7176ac34
--- /dev/null
+++ b/includes/i18n/de-DE/access_denied.po
@@ -0,0 +1,27 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/access_denied.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "access_denied.title"
+msgstr ""
+
+msgid "access_denied.desc"
+msgstr ""
+
+# %1 = User identifier
+msgid "access_denied.info"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/admin.po b/includes/i18n/de-DE/admin.po
new file mode 100644
index 00000000..33d34781
--- /dev/null
+++ b/includes/i18n/de-DE/admin.po
@@ -0,0 +1,817 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/admin.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# Paragraph text input above this string.
+msgid "admin.option.paragraph.disclaimer"
+msgstr ""
+
+msgid "admin.option.paragraph.xss_warning"
+msgstr ""
+
+# File selection input
+# %1 =
+# %2 = File name and size according to display_format below
+# %3 =
+msgid "admin.option.file.current"
+msgstr ""
+
+# %1 = (link to file)
+# %2 =
+# %3 = Name of currently used file for file upload inputs
+# %4 = Filesize in given unit
+# %5 = Filesize unit with IEC-style binary prefix (e.g. "B", "KiB", "MiB", "GiB")
+msgid "admin.option.file.display_format"
+msgstr ""
+
+msgid "admin.option.file.size_unit.byte"
+msgstr ""
+
+msgid "admin.option.file.size_unit.kilo"
+msgstr ""
+
+msgid "admin.option.file.size_unit.mega"
+msgstr ""
+
+msgid "admin.option.file.size_unit.giga"
+msgstr ""
+
+# Geofence selection input
+msgid "admin.option.geofence.available"
+msgstr ""
+
+# Icon set selector
+# %1 = User who created icon set
+msgid "admin.option.icon_set.authored_by"
+msgstr ""
+
+msgid "admin.validation.validation_failed"
+msgstr ""
+
+msgid "admin.validation.unsaved_changes"
+msgstr ""
+
+msgid "admin.domain.main.name"
+msgstr ""
+
+msgid "admin.domain.main.desc"
+msgstr ""
+
+msgid "admin.section.main.access.name"
+msgstr ""
+
+msgid "admin.section.main.instance.name"
+msgstr ""
+
+msgid "admin.section.main.motd.name"
+msgstr ""
+
+msgid "admin.section.main.spiders.name"
+msgstr ""
+
+msgid "admin.section.main.database.name"
+msgstr ""
+
+msgid "admin.domain.users.name"
+msgstr ""
+
+msgid "admin.domain.users.desc"
+msgstr ""
+
+msgid "admin.section.users.require_approval.name"
+msgstr ""
+
+msgid "admin.section.users.user_list.name"
+msgstr ""
+
+# This means the ID of the user as stored by the authentication provider of the
+# user, e.g. "@username" could be the provider identity for a user on Twitter.
+msgid "admin.table.users.user_list.column.provider_identity.name"
+msgstr ""
+
+msgid "admin.table.users.user_list.column.provider.name"
+msgstr ""
+
+msgid "admin.table.users.user_list.column.nickname.name"
+msgstr ""
+
+msgid "admin.table.users.user_list.column.group.name"
+msgstr ""
+
+msgid "admin.table.users.user_list.column.registered.name"
+msgstr ""
+
+msgid "admin.table.users.user_list.column.actions.name"
+msgstr ""
+
+msgid "admin.table.users.anonymous"
+msgstr ""
+
+msgid "admin.table.users.deleted"
+msgstr ""
+
+msgid "admin.table.users.api_deleted"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.none"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.approve"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.reject"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.delete"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.invalidate"
+msgstr ""
+
+# %1 = Padlock icon
+msgid "admin.section.users.user_list.unlock"
+msgstr ""
+
+msgid "admin.clientside.users.user_list.unlock_warning"
+msgstr ""
+
+msgid "admin.domain.groups.name"
+msgstr ""
+
+msgid "admin.domain.groups.desc"
+msgstr ""
+
+msgid "admin.section.groups.group_list.name"
+msgstr ""
+
+msgid "admin.table.groups.group_list.column.group_name.name"
+msgstr ""
+
+msgid "admin.table.groups.group_list.column.change_name.name"
+msgstr ""
+
+msgid "admin.table.groups.group_list.column.permission.name"
+msgstr ""
+
+msgid "admin.table.groups.group_list.column.color.name"
+msgstr ""
+
+msgid "admin.table.groups.group_list.column.actions.name"
+msgstr ""
+
+msgid "admin.clientside.groups.group_list.action.none"
+msgstr ""
+
+msgid "admin.clientside.groups.group_list.action.delete"
+msgstr ""
+
+msgid "admin.clientside.groups.popup.add_group"
+msgstr ""
+
+msgid "admin.clientside.groups.popup.conflicting_levels"
+msgstr ""
+
+msgid "admin.clientside.groups.new"
+msgstr ""
+
+msgid "admin.section.groups.ui.add.name"
+msgstr ""
+
+msgid "admin.domain.pois.name"
+msgstr ""
+
+msgid "admin.domain.pois.desc"
+msgstr ""
+
+# %1 = Amount of POIs
+msgid "admin.section.pois.poi_list.name"
+msgstr ""
+
+msgid "admin.section.pois.batch.name"
+msgstr ""
+
+msgid "admin.section.pois.clear.name"
+msgstr ""
+
+msgid "admin.section.pois.import.name"
+msgstr ""
+
+msgid "admin.section.pois.preview_table.name"
+msgstr ""
+
+msgid "admin.section.pois.export.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.poi_name.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.created_time.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.created_by.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.current_research.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.last_updated_time.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.last_updated_by.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.location.name"
+msgstr ""
+
+msgid "admin.table.pois.poi_list.column.actions.name"
+msgstr ""
+
+msgid "admin.section.pois.poi_list.action.none"
+msgstr ""
+
+msgid "admin.section.pois.poi_list.action.clear"
+msgstr ""
+
+msgid "admin.section.pois.poi_list.action.delete"
+msgstr ""
+
+msgid "admin.section.pois.poi_list.search"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.pois.batch.desc"
+msgstr ""
+
+msgid "admin.table.pois.batch_list.column.label.name"
+msgstr ""
+
+msgid "admin.table.pois.batch_list.column.poi_count.name"
+msgstr ""
+
+msgid "admin.table.pois.batch_list.column.actions.name"
+msgstr ""
+
+msgid "admin.section.pois.batch_list.action.none"
+msgstr ""
+
+msgid "admin.section.pois.batch_list.action.clear"
+msgstr ""
+
+msgid "admin.section.pois.batch_list.action.delete"
+msgstr ""
+
+msgid "admin.section.pois.batch_list.search"
+msgstr ""
+
+msgid "admin.section.pois.clear.desc"
+msgstr ""
+
+msgid "admin.section.pois.clear.perform.name"
+msgstr ""
+
+msgid "admin.section.pois.clear.perform.label"
+msgstr ""
+
+msgid "admin.section.pois.import.file.name"
+msgstr ""
+
+msgid "admin.section.pois.import.file.desc"
+msgstr ""
+
+msgid "admin.section.pois.import.name.name"
+msgstr ""
+
+msgid "admin.section.pois.import.name.desc"
+msgstr ""
+
+msgid "admin.section.pois.import.latitude.name"
+msgstr ""
+
+msgid "admin.section.pois.import.latitude.desc"
+msgstr ""
+
+msgid "admin.section.pois.import.longitude.name"
+msgstr ""
+
+msgid "admin.section.pois.import.longitude.desc"
+msgstr ""
+
+msgid "admin.section.pois.import.selector.none"
+msgstr ""
+
+msgid "admin.section.pois.import.selector.available"
+msgstr ""
+
+msgid "admin.table.pois.preview_table.column.include.name"
+msgstr ""
+
+msgid "admin.table.pois.preview_table.column.poi_name.name"
+msgstr ""
+
+msgid "admin.table.pois.preview_table.column.latitude.name"
+msgstr ""
+
+msgid "admin.table.pois.preview_table.column.longitude.name"
+msgstr ""
+
+msgid "admin.clientside.pois.preview_table.actions.include"
+msgstr ""
+
+msgid "admin.clientside.pois.preview_table.actions.exclude"
+msgstr ""
+
+# %1 = Number of Pokéstops in the imported list of Pokéstops.
+msgid "admin.clientside.pois.import.count"
+msgstr ""
+
+msgid "admin.section.pois.import.invalid_warning"
+msgstr ""
+
+msgid "admin.section.pois.export.info"
+msgstr ""
+
+msgid "admin.section.pois.export.do"
+msgstr ""
+
+msgid "admin.domain.perms.name"
+msgstr ""
+
+msgid "admin.domain.perms.desc"
+msgstr ""
+
+msgid "admin.section.perms.default.name"
+msgstr ""
+
+msgid "admin.section.perms.self_manage.name"
+msgstr ""
+
+msgid "admin.section.perms.map_access.name"
+msgstr ""
+
+msgid "admin.section.perms.map_access.desc"
+msgstr ""
+
+msgid "admin.section.perms.personalization.name"
+msgstr ""
+
+msgid "admin.section.perms.admin.name"
+msgstr ""
+
+msgid "admin.domain.security.name"
+msgstr ""
+
+msgid "admin.domain.security.desc"
+msgstr ""
+
+msgid "admin.section.security.user_creation.name"
+msgstr ""
+
+msgid "admin.section.security.user_creation.desc"
+msgstr ""
+
+msgid "admin.section.security.sessions.name"
+msgstr ""
+
+msgid "admin.section.security.sessions.desc"
+msgstr ""
+
+msgid "admin.section.security.outbound.name"
+msgstr ""
+
+msgid "admin.section.security.same_origin.name"
+msgstr ""
+
+msgid "admin.domain.auth.name"
+msgstr ""
+
+msgid "admin.domain.auth.desc"
+msgstr ""
+
+msgid "admin.section.auth.discord.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.discord.desc"
+msgstr ""
+
+msgid "admin.section.auth.telegram.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.telegram.desc"
+msgstr ""
+
+msgid "admin.section.auth.reddit.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.reddit.desc"
+msgstr ""
+
+msgid "admin.section.auth.facebook.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.facebook.desc"
+msgstr ""
+
+msgid "admin.section.auth.line.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.line.desc"
+msgstr ""
+
+msgid "admin.section.auth.groupme.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.auth.groupme.desc"
+msgstr ""
+
+msgid "admin.domain.mobile.name"
+msgstr ""
+
+msgid "admin.domain.mobile.desc"
+msgstr ""
+
+msgid "admin.section.mobile.pwa.name"
+msgstr ""
+
+msgid "admin.section.mobile.pwa.desc"
+msgstr ""
+
+msgid "admin.domain.themes.name"
+msgstr ""
+
+msgid "admin.domain.themes.desc"
+msgstr ""
+
+msgid "admin.section.themes.meta.name"
+msgstr ""
+
+msgid "admin.section.themes.color.name"
+msgstr ""
+
+msgid "admin.section.themes.icons.name"
+msgstr ""
+
+msgid "admin.domain.map.name"
+msgstr ""
+
+msgid "admin.domain.map.desc"
+msgstr ""
+
+msgid "admin.section.map.provider.name"
+msgstr ""
+
+msgid "admin.section.map.provider.desc"
+msgstr ""
+
+msgid "admin.section.map.default.name"
+msgstr ""
+
+msgid "admin.section.map.updates.name"
+msgstr ""
+
+msgid "admin.section.map.geofence.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.map.geofence.desc"
+msgstr ""
+
+msgid "admin.domain.fences.name"
+msgstr ""
+
+msgid "admin.domain.fences.desc"
+msgstr ""
+
+msgid "admin.section.fences.fence_list.name"
+msgstr ""
+
+msgid "admin.table.fences.fence_list.column.label.name"
+msgstr ""
+
+msgid "admin.table.fences.fence_list.column.vertices.name"
+msgstr ""
+
+msgid "admin.table.fences.fence_list.column.actions.name"
+msgstr ""
+
+msgid "admin.clientside.fences.fence_list.action.none"
+msgstr ""
+
+msgid "admin.clientside.fences.fence_list.action.delete"
+msgstr ""
+
+msgid "admin.section.fences.ui.add.name"
+msgstr ""
+
+msgid "admin.domain.hooks.name"
+msgstr ""
+
+msgid "admin.domain.hooks.desc"
+msgstr ""
+
+msgid "admin.section.hooks.active.name"
+msgstr ""
+
+msgid "admin.section.hooks.inactive.name"
+msgstr ""
+
+msgid "admin.section.hooks.settings.name"
+msgstr ""
+
+msgid "admin.section.hooks.body.json.name"
+msgstr ""
+
+msgid "admin.section.hooks.body.txt.name"
+msgstr ""
+
+msgid "admin.section.hooks.body.md.name"
+msgstr ""
+
+msgid "admin.section.hooks.body.html.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.hooks.objectives.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.hooks.rewards.name"
+msgstr ""
+
+msgid "admin.clientside.hooks.popup.add_webhook"
+msgstr ""
+
+msgid "admin.clientside.hooks.popup.add_objective"
+msgstr ""
+
+msgid "admin.clientside.hooks.popup.edit_objective"
+msgstr ""
+
+msgid "admin.clientside.hooks.popup.add_reward"
+msgstr ""
+
+msgid "admin.clientside.hooks.popup.edit_reward"
+msgstr ""
+
+msgid "admin.clientside.hooks.syntax.show"
+msgstr ""
+
+msgid "admin.clientside.hooks.syntax.hide"
+msgstr ""
+
+msgid "admin.hooks.syntax.poi.title"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.poi"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.lat"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.lng"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.coords"
+msgstr ""
+
+msgid "admin.hooks.syntax.research.title"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.objective"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.reward"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.reporter"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.time"
+msgstr ""
+
+msgid "admin.hooks.syntax.navigation.title"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.navigation.navurl"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.navigation.navurl_arg"
+msgstr ""
+
+msgid "admin.hooks.syntax.icons.title"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.icons.objective_icon"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.icons.reward_icon"
+msgstr ""
+
+msgid "admin.hooks.syntax.other.title"
+msgstr ""
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.other.i18n"
+msgstr ""
+
+msgid "admin.clientside.hooks.any_objective"
+msgstr ""
+
+msgid "admin.clientside.hooks.any_reward"
+msgstr ""
+
+# %1 = One or more research objectives (e.g. "Make 3 Great Throws")
+msgid "admin.clientside.hooks.any_objective_except"
+msgstr ""
+
+# %1 = One or more research rewards (e.g. "1 Max Revive")
+msgid "admin.clientside.hooks.any_reward_except"
+msgstr ""
+
+# Used to combine multiple objectives or rewards via "or" conditionals.
+# %1 = Research objective or reward #1 (e.g. "Make 3 Great Throws", "1 Max
+# Revive"), %2 = Research objective or reward #2
+msgid "admin.clientside.hooks.multi_or"
+msgstr ""
+
+# Used to combine multiple objectives or rewards via "and" conditionals.
+# %1 = Research objective or reward #1 (e.g. "Make 3 Great Throws", "1 Max
+# Revive"), %2 = Research objective or reward #2
+msgid "admin.clientside.hooks.multi_and"
+msgstr ""
+
+# %1 = Reason
+msgid "admin.clientside.hooks.update.objective.failed.message"
+msgstr ""
+
+# %1 = Reason
+msgid "admin.clientside.hooks.update.reward.failed.message"
+msgstr ""
+
+# Fallback for webhook target when the target cannot be identified; typically
+# displayed instead of a domain name
+msgid "admin.clientside.domain.unknown"
+msgstr ""
+
+# Telegram specific setting
+msgid "admin.clientside.hooks.tg.xhr.groups.failed.empty_token"
+msgstr ""
+
+# Telegram specific setting
+msgid "admin.clientside.hooks.tg.xhr.groups.failed.no_groups"
+msgstr ""
+
+# Telegram specific setting
+msgid "admin.hooks.popup.tg.searching_group"
+msgstr ""
+
+# Telegram specific setting
+msgid "admin.hooks.popup.tg.select_group"
+msgstr ""
+
+msgid "admin.section.hooks.ui.add.name"
+msgstr ""
+
+msgid "admin.domain.api.name"
+msgstr ""
+
+msgid "admin.domain.api.desc"
+msgstr ""
+
+msgid "admin.section.api.client_list.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.name.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.color.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.token.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.seen.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.access.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.actions.name"
+msgstr ""
+
+msgid "admin.table.api.client_list.column.token.mask"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.action.none"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.action.reset"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.action.delete"
+msgstr ""
+
+msgid "admin.section.api.ui.add.name"
+msgstr ""
+
+msgid "admin.section.api.ui.copy.name"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.token.new"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.seen.never"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.access.level"
+msgstr ""
+
+msgid "admin.clientside.api.client_list.access.none"
+msgstr ""
+
+msgid "admin.api.popup.view_token.title"
+msgstr ""
+
+msgid "admin.api.popup.view_token.client_name"
+msgstr ""
+
+msgid "admin.api.popup.access_list.title"
+msgstr ""
+
+msgid "admin.api.popup.access_list.client_name"
+msgstr ""
+
+msgid "admin.api.popup.access_list.level"
+msgstr ""
+
+msgid "admin.domain.updates.name"
+msgstr ""
+
+msgid "admin.domain.updates.desc"
+msgstr ""
+
+msgid "admin.section.updates.info.name"
+msgstr ""
+
+msgid "admin.section.updates.available.name"
+msgstr ""
+
+# %1 = Warning triangle symbol
+msgid "admin.section.updates.git.name"
+msgstr ""
+
+# %1 = , %2 =
+msgid "admin.section.updates.git.desc"
+msgstr ""
+
+msgid "admin.section.updates.available.release_notes"
+msgstr ""
+
+msgid "admin.section.updates.ui.update.name"
+msgstr ""
+
+msgid "admin.section.updates.ui.install.name"
+msgstr ""
+
+msgid "admin.updates.popup.confirm_install.title"
+msgstr ""
+
+msgid "admin.updates.popup.confirm_install.disclaimer"
+msgstr ""
+
+msgid "admin.updates.popup.confirm_install.target"
+msgstr ""
+
+msgid "admin.updates.popup.confirm_install.liability_statement"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/approve_user.po b/includes/i18n/de-DE/approve_user.po
new file mode 100644
index 00000000..1249201d
--- /dev/null
+++ b/includes/i18n/de-DE/approve_user.po
@@ -0,0 +1,61 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/approve_user.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.title"
+msgstr ""
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.desc"
+msgstr ""
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.info"
+msgstr ""
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.title"
+msgstr ""
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.desc"
+msgstr ""
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.info"
+msgstr ""
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.button.approve"
+msgstr ""
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.button.reject"
+msgstr ""
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.title"
+msgstr ""
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.desc"
+msgstr ""
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.info"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/awaiting_approval.po b/includes/i18n/de-DE/awaiting_approval.po
new file mode 100644
index 00000000..43fe9116
--- /dev/null
+++ b/includes/i18n/de-DE/awaiting_approval.po
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/awaiting_approval.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "awaiting_approval.title"
+msgstr ""
+
+msgid "awaiting_approval.desc"
+msgstr ""
+
+msgid "awaiting_approval.info.1"
+msgstr ""
+
+msgid "awaiting_approval.info.2.qr_enabled"
+msgstr ""
+
+msgid "awaiting_approval.info.2.qr_disabled"
+msgstr ""
+
+msgid "awaiting_approval.using.qr.head"
+msgstr ""
+
+msgid "awaiting_approval.using.link.head"
+msgstr ""
+
+msgid "awaiting_approval.using.link.info"
+msgstr ""
+
+msgid "awaiting_approval.return_button"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/category.po b/includes/i18n/de-DE/category.po
new file mode 100644
index 00000000..b9570720
--- /dev/null
+++ b/includes/i18n/de-DE/category.po
@@ -0,0 +1,84 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/category.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# Label for objectives which are currently in-game (e.g. monthly, event, etc.)
+msgid "category.objective.current"
+msgstr ""
+
+msgid "category.objective.battle"
+msgstr ""
+
+msgid "category.objective.raid"
+msgstr ""
+
+msgid "category.objective.catch"
+msgstr ""
+
+msgid "category.objective.item"
+msgstr ""
+
+msgid "category.objective.buddy"
+msgstr ""
+
+msgid "category.objective.hatch"
+msgstr ""
+
+msgid "category.objective.evolve"
+msgstr ""
+
+msgid "category.objective.power_up"
+msgstr ""
+
+msgid "category.objective.transfer"
+msgstr ""
+
+msgid "category.objective.throwing_skill"
+msgstr ""
+
+msgid "category.objective.explore"
+msgstr ""
+
+msgid "category.objective.social"
+msgstr ""
+
+msgid "category.reward.ball"
+msgstr ""
+
+msgid "category.reward.berry"
+msgstr ""
+
+msgid "category.reward.potion"
+msgstr ""
+
+msgid "category.reward.revive"
+msgstr ""
+
+msgid "category.reward.evolution_item"
+msgstr ""
+
+msgid "category.reward.tm"
+msgstr ""
+
+msgid "category.reward.stardust"
+msgstr ""
+
+msgid "category.reward.candy"
+msgstr ""
+
+msgid "category.reward.encounter"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/clustering.po b/includes/i18n/de-DE/clustering.po
new file mode 100644
index 00000000..f08f778e
--- /dev/null
+++ b/includes/i18n/de-DE/clustering.po
@@ -0,0 +1,23 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/clustering.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# %1 = Number of POIs hidden from map
+# %2 = Total number of POIs that are supposed to be visible in the map view
+# %3 = "Hidden" icon graphic
+msgid "clustering.banner"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/generation.po b/includes/i18n/de-DE/generation.po
new file mode 100644
index 00000000..1c534e3b
--- /dev/null
+++ b/includes/i18n/de-DE/generation.po
@@ -0,0 +1,29 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/generation.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "generation.1.label"
+msgstr ""
+
+msgid "generation.2.label"
+msgstr ""
+
+msgid "generation.3.label"
+msgstr ""
+
+msgid "generation.4.label"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/geo.po b/includes/i18n/de-DE/geo.po
new file mode 100644
index 00000000..b9aedb44
--- /dev/null
+++ b/includes/i18n/de-DE/geo.po
@@ -0,0 +1,40 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/geo.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# This string determines how coordinate strings are displayed (consider the
+# order of the coordinates, whether there should be a comma, etc.)
+# %1 = Latitude, %2 = Longitude
+# E.g. %1 = "40.1234°N", %2 = "10.4321°E"
+msgid "geo.location.string"
+msgstr ""
+
+# %1 = Degrees
+msgid "geo.direction.deg_north"
+msgstr ""
+
+# %1 = Degrees
+msgid "geo.direction.deg_south"
+msgstr ""
+
+# %1 = Degrees
+msgid "geo.direction.deg_east"
+msgstr ""
+
+# %1 = Degrees
+msgid "geo.direction.deg_west"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/group.po b/includes/i18n/de-DE/group.po
new file mode 100644
index 00000000..54d094d0
--- /dev/null
+++ b/includes/i18n/de-DE/group.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/group.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "group.selector.current"
+msgstr ""
+
+msgid "group.selector.available"
+msgstr ""
+
+msgid "group.level.unknown"
+msgstr ""
+
+msgid "group.level.anonymous"
+msgstr ""
+
+msgid "group.level.read_only"
+msgstr ""
+
+msgid "group.level.registered"
+msgstr ""
+
+msgid "group.level.submitter"
+msgstr ""
+
+msgid "group.level.moderator"
+msgstr ""
+
+msgid "group.level.admin"
+msgstr ""
+
+msgid "group.level.host"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/install.po b/includes/i18n/de-DE/install.po
new file mode 100644
index 00000000..ac338bf1
--- /dev/null
+++ b/includes/i18n/de-DE/install.po
@@ -0,0 +1,168 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/install.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "install.button.continue"
+msgstr ""
+
+msgid "install.button.finish"
+msgstr ""
+
+msgid "install.button.retry"
+msgstr ""
+
+msgid "install.operation.done"
+msgstr ""
+
+msgid "install.stage.1.title"
+msgstr ""
+
+msgid "install.stage.1.info"
+msgstr ""
+
+msgid "install.stage.1.assert.https"
+msgstr ""
+
+msgid "install.stage.1.assert.root_writable"
+msgstr ""
+
+msgid "install.stage.1.assert.userdata_writable"
+msgstr ""
+
+msgid "install.stage.1.assert.curl_available"
+msgstr ""
+
+msgid "install.stage.1.assert.gd_available"
+msgstr ""
+
+msgid "install.stage.1.assert.openssl_available"
+msgstr ""
+
+msgid "install.stage.1.assert.phar_available"
+msgstr ""
+
+msgid "install.stage.1.checks"
+msgstr ""
+
+msgid "install.stage.1.next"
+msgstr ""
+
+msgid "install.stage.2.title"
+msgstr ""
+
+msgid "install.stage.2.assert.copy_templates"
+msgstr ""
+
+msgid "install.stage.2.assert.authkeys_written"
+msgstr ""
+
+msgid "install.stage.2.assert.config_written"
+msgstr ""
+
+msgid "install.stage.2.next"
+msgstr ""
+
+msgid "install.stage.3.title"
+msgstr ""
+
+msgid "install.stage.3.info"
+msgstr ""
+
+msgid "install.stage.3.assert.valid_data"
+msgstr ""
+
+msgid "install.stage.3.assert.config_written"
+msgstr ""
+
+msgid "install.stage.3.assert.db_connected"
+msgstr ""
+
+msgid "install.stage.3.assert.exec_sql"
+msgstr ""
+
+msgid "install.stage.3.assert.proceed_stage"
+msgstr ""
+
+msgid "install.stage.3.next"
+msgstr ""
+
+msgid "install.stage.4.title"
+msgstr ""
+
+msgid "install.stage.4.info"
+msgstr ""
+
+msgid "install.stage.4.assert.valid_data"
+msgstr ""
+
+msgid "install.stage.4.assert.config_written"
+msgstr ""
+
+msgid "install.stage.4.assert.any_enabled"
+msgstr ""
+
+msgid "install.stage.4.assert.proceed_stage"
+msgstr ""
+
+msgid "install.stage.4.next"
+msgstr ""
+
+msgid "install.stage.5.title"
+msgstr ""
+
+msgid "install.stage.5.assert.auth_success"
+msgstr ""
+
+msgid "install.stage.5.assert.user_created"
+msgstr ""
+
+msgid "install.stage.5.assert.config_written"
+msgstr ""
+
+msgid "install.stage.5.next"
+msgstr ""
+
+msgid "install.stage.6.title"
+msgstr ""
+
+msgid "install.stage.6.provider_info"
+msgstr ""
+
+msgid "install.stage.6.disclaimer"
+msgstr ""
+
+msgid "install.stage.6.field_guide"
+msgstr ""
+
+msgid "install.stage.6.default_info"
+msgstr ""
+
+msgid "install.stage.6.assert.valid_data"
+msgstr ""
+
+msgid "install.stage.6.assert.config_written"
+msgstr ""
+
+msgid "install.stage.6.next"
+msgstr ""
+
+msgid "install.stage.6.post_install.head"
+msgstr ""
+
+# %1 = , %2 =
+msgid "install.stage.6.post_install.body"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/language.po b/includes/i18n/de-DE/language.po
new file mode 100644
index 00000000..9352600a
--- /dev/null
+++ b/includes/i18n/de-DE/language.po
@@ -0,0 +1,25 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/language.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# The name of the language and country in English (e.g. "French (France)", "Spanish (Spain)")
+msgid "language.name_english"
+msgstr ""
+
+# The native name of the language and country (e.g. "Français (France)", "Español (España)")
+msgid "language.name_native"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/login.po b/includes/i18n/de-DE/login.po
new file mode 100644
index 00000000..2e96d72f
--- /dev/null
+++ b/includes/i18n/de-DE/login.po
@@ -0,0 +1,36 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/login.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "login.title"
+msgstr ""
+
+msgid "login.desc"
+msgstr ""
+
+# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
+msgid "login.perform"
+msgstr ""
+
+msgid "login.reconfigure"
+msgstr ""
+
+msgid "login.telegram.title"
+msgstr ""
+
+msgid "login.telegram.body"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/login_failed.po b/includes/i18n/de-DE/login_failed.po
new file mode 100644
index 00000000..a9a4c7e8
--- /dev/null
+++ b/includes/i18n/de-DE/login_failed.po
@@ -0,0 +1,30 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/login_failed.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "login_failed.title"
+msgstr ""
+
+msgid "login_failed.default_auth_provider"
+msgstr ""
+
+# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
+msgid "login_failed.desc"
+msgstr ""
+
+msgid "login_failed.info"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/mobile.po b/includes/i18n/de-DE/mobile.po
new file mode 100644
index 00000000..32d261ce
--- /dev/null
+++ b/includes/i18n/de-DE/mobile.po
@@ -0,0 +1,20 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/mobile.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "mobile.pwa.connecting"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/motd.po b/includes/i18n/de-DE/motd.po
new file mode 100644
index 00000000..9b1c275b
--- /dev/null
+++ b/includes/i18n/de-DE/motd.po
@@ -0,0 +1,26 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/motd.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "motd.title"
+msgstr ""
+
+msgid "motd.hide"
+msgstr ""
+
+msgid "motd.close"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/multi.po b/includes/i18n/de-DE/multi.po
new file mode 100644
index 00000000..e4f39f9c
--- /dev/null
+++ b/includes/i18n/de-DE/multi.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/multi.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# This string is a string displayed for type tasks. E.g. "Water-type" in "Catch
+# 3 Water-type Pokémon."
+# %1 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.single"
+msgstr ""
+
+# This string is a string displayed for type tasks. E.g. "Water, Fire or
+# Grass-type" in "Catch 3 Water, Fire or Grass-type Pokémon."
+# %1 and %2 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.double"
+msgstr ""
+
+# This string is a string displayed for type tasks. E.g. "Water or Grass-type"
+# in "Catch 3 Water or Grass-type Pokémon."
+# %1 through %3 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.triple"
+msgstr ""
+
+# This string is a string used to display and concatenate multiple species.
+# E.g. "Bulbasaur or Squirtle" in "Catch a Bulbasaur or Squirtle."
+# %1 through %3 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "multi.species.double"
+msgstr ""
+
+# This string is a string used to display and concatenate multiple species.
+# E.g. "Bulbasaur, Charmander or Squirtle" in "Catch a Bulbasaur, Charmander or
+# Squirtle."
+msgid "multi.species.triple"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/objective.po b/includes/i18n/de-DE/objective.po
new file mode 100644
index 00000000..734e4564
--- /dev/null
+++ b/includes/i18n/de-DE/objective.po
@@ -0,0 +1,323 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/objective.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "objective.battle_gym.singular"
+msgstr ""
+
+# %1 = Number of battles
+msgid "objective.battle_gym.plural"
+msgstr ""
+
+msgid "objective.win_gym.singular"
+msgstr ""
+
+# %1 = Number of battles
+msgid "objective.win_gym.plural"
+msgstr ""
+
+msgid "objective.battle_raid.singular"
+msgstr ""
+
+# %1 = Number of raids
+msgid "objective.battle_raid.plural"
+msgstr ""
+
+msgid "objective.win_raid.singular"
+msgstr ""
+
+# %1 = Number of raids
+msgid "objective.win_raid.plural"
+msgstr ""
+
+# %1 = Raid tier
+msgid "objective.level_raid.singular"
+msgstr ""
+
+# %1 = Raid tier, %2 = Number of raids
+msgid "objective.level_raid.plural"
+msgstr ""
+
+msgid "objective.se_charge.singular"
+msgstr ""
+
+# %1 = Number of battles
+msgid "objective.se_charge.plural"
+msgstr ""
+
+msgid "objective.catch.singular"
+msgstr ""
+
+# %1 = Number of catches
+msgid "objective.catch.plural"
+msgstr ""
+
+msgid "objective.catch_weather.singular"
+msgstr ""
+
+# %1 = Number of catches
+msgid "objective.catch_weather.plural"
+msgstr ""
+
+# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.catch_type.singular"
+msgstr ""
+
+# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.),
+# %2 = Number of catches
+msgid "objective.catch_type.plural"
+msgstr ""
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.)
+msgid "objective.catch_specific.singular"
+msgstr ""
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.), %2 = Number of catches
+msgid "objective.catch_specific.plural"
+msgstr ""
+
+msgid "objective.catch_daily.singular"
+msgstr ""
+
+# %1 = Number of days in a row
+msgid "objective.catch_daily.plural"
+msgstr ""
+
+msgid "objective.use_berry.singular"
+msgstr ""
+
+# %1 = Number of berries
+msgid "objective.use_berry.plural"
+msgstr ""
+
+# %1 = Item to use (e.g. "Pinap Berry")
+msgid "objective.use_item_encounter.singular"
+msgstr ""
+
+# %1 = Item to use (e.g. "Pinap Berry")
+# %2 = Number of items
+msgid "objective.use_item_encounter.plural"
+msgstr ""
+
+msgid "objective.buddy_candy.singular"
+msgstr ""
+
+# %1 = Number of candies
+msgid "objective.buddy_candy.plural"
+msgstr ""
+
+msgid "objective.hatch.singular"
+msgstr ""
+
+# %1 = Number of eggs
+msgid "objective.hatch.plural"
+msgstr ""
+
+msgid "objective.evolve.singular"
+msgstr ""
+
+# %1 = Number of evolves
+msgid "objective.evolve.plural"
+msgstr ""
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.evolve_type.singular"
+msgstr ""
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+# %2 = Number of evolves
+msgid "objective.evolve_type.plural"
+msgstr ""
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.evolve_evolution.singular"
+msgstr ""
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+# %2 = Number of evolves
+msgid "objective.evolve_evolution.plural"
+msgstr ""
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.)
+msgid "objective.evolve_specific.singular"
+msgstr ""
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.), %2 = Number of evolves
+msgid "objective.evolve_specific.plural"
+msgstr ""
+
+msgid "objective.evolve_item.singular"
+msgstr ""
+
+# %1 = Number of evolves
+msgid "objective.evolve_item.plural"
+msgstr ""
+
+msgid "objective.power_up.singular"
+msgstr ""
+
+# %1 = Number of power-ups
+msgid "objective.power_up.plural"
+msgstr ""
+
+msgid "objective.transfer.singular"
+msgstr ""
+
+# %1 = Number of transfers
+msgid "objective.transfer.plural"
+msgstr ""
+
+msgid "objective.throw_simple_nice.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_nice.plural"
+msgstr ""
+
+msgid "objective.throw_simple_nice_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_nice_chain.plural"
+msgstr ""
+
+msgid "objective.throw_simple_great.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_great.plural"
+msgstr ""
+
+msgid "objective.throw_simple_great_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_great_chain.plural"
+msgstr ""
+
+msgid "objective.throw_simple_excellent.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_excellent.plural"
+msgstr ""
+
+msgid "objective.throw_simple_excellent_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_simple_excellent_chain.plural"
+msgstr ""
+
+msgid "objective.throw_curve.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve.plural"
+msgstr ""
+
+msgid "objective.throw_curve_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_chain.plural"
+msgstr ""
+
+msgid "objective.throw_curve_nice.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_nice.plural"
+msgstr ""
+
+msgid "objective.throw_curve_nice_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_nice_chain.plural"
+msgstr ""
+
+msgid "objective.throw_curve_great.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_great.plural"
+msgstr ""
+
+msgid "objective.throw_curve_great_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_great_chain.plural"
+msgstr ""
+
+msgid "objective.throw_curve_excellent.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_excellent.plural"
+msgstr ""
+
+msgid "objective.throw_curve_excellent_chain.singular"
+msgstr ""
+
+# %1 = Number of throws
+msgid "objective.throw_curve_excellent_chain.plural"
+msgstr ""
+
+msgid "objective.visit_poi.singular"
+msgstr ""
+
+# %1 = Number of POIs
+msgid "objective.visit_poi.plural"
+msgstr ""
+
+msgid "objective.new_poi.singular"
+msgstr ""
+
+# %1 = Number of POIs
+msgid "objective.new_poi.plural"
+msgstr ""
+
+msgid "objective.visit_daily.singular"
+msgstr ""
+
+# %1 = Number of days in a row
+msgid "objective.visit_daily.plural"
+msgstr ""
+
+msgid "objective.send_gift.singular"
+msgstr ""
+
+# %1 = Number of gifts to send
+msgid "objective.send_gift.plural"
+msgstr ""
+
+msgid "objective.trade.singular"
+msgstr ""
+
+# %1 = Number of specimen to trade
+msgid "objective.trade.plural"
+msgstr ""
+
+# Displayed when the research task objective of a Pokéstop is unknown.
+msgid "objective.unknown.singular"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/page_title.po b/includes/i18n/de-DE/page_title.po
new file mode 100644
index 00000000..817ca503
--- /dev/null
+++ b/includes/i18n/de-DE/page_title.po
@@ -0,0 +1,53 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/page_title.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "page_title.setup"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+# %2 = Administration domain (e.g. "Users", "Webhooks")
+msgid "page_title.admin"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.main"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.access_denied"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.main"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.failed"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.awaiting_approval"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.approve_user"
+msgstr ""
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.telegram"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/parameter.po b/includes/i18n/de-DE/parameter.po
new file mode 100644
index 00000000..a6cc97d2
--- /dev/null
+++ b/includes/i18n/de-DE/parameter.po
@@ -0,0 +1,96 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/parameter.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the minimum level of a raid.
+msgid "parameter.min_tier.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Win a level [placeholder] or higher raid"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.min_tier.placeholder"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the minimum objective or
+# reward quantity (e.g. minimum number of Pokémon to catch).
+msgid "parameter.quantity.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch [placeholder] Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.quantity.placeholder"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the catch/evolve/etc. species
+# requirements.
+msgid "parameter.species.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch a [placeholder]"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.species.placeholder"
+msgstr ""
+
+# This is a header displayed in a selection box when selecting a particular
+# species for a research objective. It lists commonly reported species.
+msgid "parameter.species.recent.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the catch/evolve/etc. type
+# requirements.
+msgid "parameter.type.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch a [placeholder] Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.type.placeholder"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the item usage requirements
+# for encounters.
+msgid "parameter.encounter_item.label"
+msgstr ""
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Use a [placeholder] to help catch Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.encounter_item.placeholder"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/poi.po b/includes/i18n/de-DE/poi.po
new file mode 100644
index 00000000..cb952749
--- /dev/null
+++ b/includes/i18n/de-DE/poi.po
@@ -0,0 +1,199 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/poi.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# %1 = Last updated date/time
+msgid "poi.last.time"
+msgstr ""
+
+# %1 = Nickname of last user to update POI
+msgid "poi.last.user"
+msgstr ""
+
+msgid "poi.add.title"
+msgstr ""
+
+msgid "poi.add.name"
+msgstr ""
+
+msgid "poi.add.latitude"
+msgstr ""
+
+msgid "poi.add.longitude"
+msgstr ""
+
+msgid "poi.add.submit"
+msgstr ""
+
+msgid "poi.add.processing"
+msgstr ""
+
+# %1 = Name of POI
+msgid "poi.add.success"
+msgstr ""
+
+# %1 = Name of POI, %2 = Reason it failed
+msgid "poi.add.failed.message"
+msgstr ""
+
+# %1 = , %2 =
+msgid "poi.add.instructions"
+msgstr ""
+
+msgid "poi.move.instructions"
+msgstr ""
+
+msgid "poi.move.processing"
+msgstr ""
+
+msgid "poi.move.success"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.move.failed.message"
+msgstr ""
+
+msgid "poi.rename.prompt"
+msgstr ""
+
+msgid "poi.rename.processing"
+msgstr ""
+
+msgid "poi.rename.success"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.rename.failed.message"
+msgstr ""
+
+msgid "poi.clear.confirm"
+msgstr ""
+
+msgid "poi.clear.processing"
+msgstr ""
+
+msgid "poi.clear.success"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.clear.failed.message"
+msgstr ""
+
+msgid "poi.delete.confirm"
+msgstr ""
+
+msgid "poi.delete.processing"
+msgstr ""
+
+msgid "poi.delete.success"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.delete.failed.message"
+msgstr ""
+
+msgid "poi.update.title"
+msgstr ""
+
+msgid "poi.update.name"
+msgstr ""
+
+msgid "poi.update.objective"
+msgstr ""
+
+msgid "poi.update.reward"
+msgstr ""
+
+msgid "poi.update.submit"
+msgstr ""
+
+msgid "poi.update.processing"
+msgstr ""
+
+msgid "poi.update.success"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.update.failed.message"
+msgstr ""
+
+msgid "poi.search.placeholder"
+msgstr ""
+
+# %1 = Distance in kilometers
+msgid "poi.search.distance"
+msgstr ""
+
+msgid "poi.filter.title"
+msgstr ""
+
+msgid "poi.filter.mode.title"
+msgstr ""
+
+msgid "poi.filter.mode.only"
+msgstr ""
+
+msgid "poi.filter.mode.except"
+msgstr ""
+
+msgid "poi.filter.mode.unknown"
+msgstr ""
+
+msgid "poi.filter.objective.title"
+msgstr ""
+
+msgid "poi.filter.objective.any"
+msgstr ""
+
+msgid "poi.filter.reward.title"
+msgstr ""
+
+msgid "poi.filter.reward.any"
+msgstr ""
+
+msgid "poi.filter.submit"
+msgstr ""
+
+msgid "poi.filter.reset"
+msgstr ""
+
+# %1 = Reason it failed
+msgid "poi.list.failed.message"
+msgstr ""
+
+# %1 = Research objective (e.g. "Make 3 Great Throws")
+# %2 = Research reward (e.g. "1 Max Revive")
+msgid "poi.objective_text"
+msgstr ""
+
+msgid "poi.report_research"
+msgstr ""
+
+msgid "poi.move"
+msgstr ""
+
+msgid "poi.rename"
+msgstr ""
+
+msgid "poi.clear"
+msgstr ""
+
+msgid "poi.delete"
+msgstr ""
+
+msgid "poi.directions"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/release_type.po b/includes/i18n/de-DE/release_type.po
new file mode 100644
index 00000000..d2673a7e
--- /dev/null
+++ b/includes/i18n/de-DE/release_type.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/release_type.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "release_type.stable.name"
+msgstr ""
+
+msgid "release_type.stable.desc"
+msgstr ""
+
+msgid "release_type.rc.name"
+msgstr ""
+
+msgid "release_type.rc.desc"
+msgstr ""
+
+msgid "release_type.beta.name"
+msgstr ""
+
+msgid "release_type.beta.desc"
+msgstr ""
+
+msgid "release_type.alpha.name"
+msgstr ""
+
+msgid "release_type.alpha.desc"
+msgstr ""
+
+msgid "release_type.dev.name"
+msgstr ""
+
+msgid "release_type.dev.desc"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/reward.po b/includes/i18n/de-DE/reward.po
new file mode 100644
index 00000000..2386e5d4
--- /dev/null
+++ b/includes/i18n/de-DE/reward.po
@@ -0,0 +1,278 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/reward.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "reward.poke_ball.general"
+msgstr ""
+
+msgid "reward.poke_ball.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.poke_ball.plural"
+msgstr ""
+
+msgid "reward.great_ball.general"
+msgstr ""
+
+msgid "reward.great_ball.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.great_ball.plural"
+msgstr ""
+
+msgid "reward.ultra_ball.general"
+msgstr ""
+
+msgid "reward.ultra_ball.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.ultra_ball.plural"
+msgstr ""
+
+msgid "reward.razz_berry.general"
+msgstr ""
+
+msgid "reward.razz_berry.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.razz_berry.plural"
+msgstr ""
+
+msgid "reward.nanab_berry.general"
+msgstr ""
+
+msgid "reward.nanab_berry.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.nanab_berry.plural"
+msgstr ""
+
+msgid "reward.pinap_berry.general"
+msgstr ""
+
+msgid "reward.pinap_berry.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.pinap_berry.plural"
+msgstr ""
+
+msgid "reward.golden_razz_berry.general"
+msgstr ""
+
+msgid "reward.golden_razz_berry.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.golden_razz_berry.plural"
+msgstr ""
+
+msgid "reward.silver_pinap_berry.general"
+msgstr ""
+
+msgid "reward.silver_pinap_berry.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.silver_pinap_berry.plural"
+msgstr ""
+
+msgid "reward.potion.general"
+msgstr ""
+
+msgid "reward.potion.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.potion.plural"
+msgstr ""
+
+msgid "reward.super_potion.general"
+msgstr ""
+
+msgid "reward.super_potion.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.super_potion.plural"
+msgstr ""
+
+msgid "reward.hyper_potion.general"
+msgstr ""
+
+msgid "reward.hyper_potion.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.hyper_potion.plural"
+msgstr ""
+
+msgid "reward.max_potion.general"
+msgstr ""
+
+msgid "reward.max_potion.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.max_potion.plural"
+msgstr ""
+
+msgid "reward.revive.general"
+msgstr ""
+
+msgid "reward.revive.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.revive.plural"
+msgstr ""
+
+msgid "reward.max_revive.general"
+msgstr ""
+
+msgid "reward.max_revive.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.max_revive.plural"
+msgstr ""
+
+msgid "reward.sun_stone.general"
+msgstr ""
+
+msgid "reward.sun_stone.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.sun_stone.plural"
+msgstr ""
+
+msgid "reward.kings_rock.general"
+msgstr ""
+
+msgid "reward.kings_rock.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.kings_rock.plural"
+msgstr ""
+
+msgid "reward.metal_coat.general"
+msgstr ""
+
+msgid "reward.metal_coat.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.metal_coat.plural"
+msgstr ""
+
+msgid "reward.dragon_scale.general"
+msgstr ""
+
+msgid "reward.dragon_scale.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.dragon_scale.plural"
+msgstr ""
+
+msgid "reward.up_grade.general"
+msgstr ""
+
+msgid "reward.up_grade.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.up_grade.plural"
+msgstr ""
+
+msgid "reward.sinnoh_stone.general"
+msgstr ""
+
+msgid "reward.sinnoh_stone.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.sinnoh_stone.plural"
+msgstr ""
+
+msgid "reward.fast_tm.general"
+msgstr ""
+
+msgid "reward.fast_tm.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.fast_tm.plural"
+msgstr ""
+
+msgid "reward.charge_tm.general"
+msgstr ""
+
+msgid "reward.charge_tm.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.charge_tm.plural"
+msgstr ""
+
+msgid "reward.stardust.general"
+msgstr ""
+
+msgid "reward.stardust.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.stardust.plural"
+msgstr ""
+
+msgid "reward.rare_candy.general"
+msgstr ""
+
+msgid "reward.rare_candy.singular"
+msgstr ""
+
+# %1 = Amount/quantity
+msgid "reward.rare_candy.plural"
+msgstr ""
+
+msgid "reward.encounter.general"
+msgstr ""
+
+msgid "reward.encounter.singular"
+msgstr ""
+
+msgid "reward.encounter.plural"
+msgstr ""
+
+# %1 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "reward.encounter_specific.singular"
+msgstr ""
+
+# %1 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "reward.encounter_specific.plural"
+msgstr ""
+
+# Displayed when the research task reward from a Pokéstop is unknown.
+msgid "reward.unknown.singular"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/setting.po b/includes/i18n/de-DE/setting.po
new file mode 100644
index 00000000..486ccf07
--- /dev/null
+++ b/includes/i18n/de-DE/setting.po
@@ -0,0 +1,1218 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/setting.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "setting.site.uri.name"
+msgstr ""
+
+msgid "setting.site.uri.desc"
+msgstr ""
+
+msgid "setting.site.name.name"
+msgstr ""
+
+msgid "setting.site.name.desc"
+msgstr ""
+
+msgid "setting.site.menu_header.name"
+msgstr ""
+
+msgid "setting.site.menu_header.desc"
+msgstr ""
+
+msgid "setting.site.menu_image.name"
+msgstr ""
+
+msgid "setting.site.menu_image.desc"
+msgstr ""
+
+msgid "setting.site.header_style.name"
+msgstr ""
+
+msgid "setting.site.header_style.desc"
+msgstr ""
+
+msgid "setting.site.header_style.option.text"
+msgstr ""
+
+msgid "setting.site.header_style.option.image"
+msgstr ""
+
+msgid "setting.site.header_style.option.image_plain"
+msgstr ""
+
+msgid "setting.motd.display_mode.name"
+msgstr ""
+
+msgid "setting.motd.display_mode.desc"
+msgstr ""
+
+msgid "setting.motd.display_mode.option.forced"
+msgstr ""
+
+msgid "setting.motd.display_mode.option.always"
+msgstr ""
+
+msgid "setting.motd.display_mode.option.on_change"
+msgstr ""
+
+msgid "setting.motd.display_mode.option.on_request"
+msgstr ""
+
+msgid "setting.motd.display_mode.option.never"
+msgstr ""
+
+msgid "setting.motd.title.name"
+msgstr ""
+
+msgid "setting.motd.title.desc"
+msgstr ""
+
+msgid "setting.motd.content.name"
+msgstr ""
+
+msgid "setting.motd.content.desc"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.name"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.desc"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.option.all"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.option.nofollow"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.option.noindex"
+msgstr ""
+
+msgid "setting.spiders.robots_policy.option.noindex_nofollow"
+msgstr ""
+
+msgid "setting.database.type.name"
+msgstr ""
+
+msgid "setting.database.type.desc"
+msgstr ""
+
+msgid "setting.database.type.option.mysql"
+msgstr ""
+
+msgid "setting.database.type.option.pgsql"
+msgstr ""
+
+msgid "setting.database.type.option.sqlite"
+msgstr ""
+
+msgid "setting.database.type.option.sqlite2"
+msgstr ""
+
+msgid "setting.database.type.option.sqlsrv"
+msgstr ""
+
+msgid "setting.database.type.option.4D"
+msgstr ""
+
+msgid "setting.database.type.option.oci"
+msgstr ""
+
+msgid "setting.database.type.option.cubrid"
+msgstr ""
+
+msgid "setting.database.type.option.sybase"
+msgstr ""
+
+msgid "setting.database.type.option.mssql"
+msgstr ""
+
+msgid "setting.database.type.option.dblib"
+msgstr ""
+
+msgid "setting.database.host.name"
+msgstr ""
+
+msgid "setting.database.host.desc"
+msgstr ""
+
+msgid "setting.database.port.name"
+msgstr ""
+
+msgid "setting.database.port.desc"
+msgstr ""
+
+msgid "setting.database.username.name"
+msgstr ""
+
+msgid "setting.database.username.desc"
+msgstr ""
+
+msgid "setting.database.password.name"
+msgstr ""
+
+msgid "setting.database.password.desc"
+msgstr ""
+
+msgid "setting.database.database.name"
+msgstr ""
+
+msgid "setting.database.database.desc"
+msgstr ""
+
+msgid "setting.database.table_prefix.name"
+msgstr ""
+
+msgid "setting.database.table_prefix.desc"
+msgstr ""
+
+msgid "setting.permissions.default_level.name"
+msgstr ""
+
+msgid "setting.permissions.default_level.desc"
+msgstr ""
+
+msgid "setting.permissions.level.self_manage.nickname.name"
+msgstr ""
+
+msgid "setting.permissions.level.self_manage.nickname.desc"
+msgstr ""
+
+msgid "setting.permissions.level.access.name"
+msgstr ""
+
+msgid "setting.permissions.level.access.desc"
+msgstr ""
+
+msgid "setting.permissions.level.find_reporter.name"
+msgstr ""
+
+msgid "setting.permissions.level.find_reporter.desc"
+msgstr ""
+
+msgid "setting.permissions.level.report_research.name"
+msgstr ""
+
+msgid "setting.permissions.level.report_research.desc"
+msgstr ""
+
+msgid "setting.permissions.level.overwrite_research.name"
+msgstr ""
+
+msgid "setting.permissions.level.overwrite_research.desc"
+msgstr ""
+
+msgid "setting.permissions.level.submit_poi.name"
+msgstr ""
+
+msgid "setting.permissions.level.submit_poi.desc"
+msgstr ""
+
+msgid "setting.permissions.level.personalization.icons.name"
+msgstr ""
+
+msgid "setting.permissions.level.personalization.icons.desc"
+msgstr ""
+
+msgid "setting.permissions.level.personalization.species.name"
+msgstr ""
+
+msgid "setting.permissions.level.personalization.species.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.access.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.access.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.instance.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.instance.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.motd.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.motd.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.spiders.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.spiders.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.database.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.main.section.database.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.users.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.users.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.groups.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.groups.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.users.groups.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.users.groups.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.groups.self_manage.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.groups.self_manage.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.pois.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.pois.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.pois.import.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.pois.import.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.default.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.default.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.self_manage.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.self_manage.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.map_access.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.map_access.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.personalization.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.personalization.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.admin.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.perms.section.admin.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.user_creation.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.user_creation.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.sessions.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.sessions.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.outbound.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.outbound.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.same_origin.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.security.section.same_origin.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.discord.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.discord.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.telegram.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.telegram.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.reddit.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.reddit.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.facebook.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.facebook.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.line.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.line.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.groupme.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.auth.section.groupme.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.mobile.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.mobile.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.mobile.section.pwa.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.mobile.section.pwa.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.meta.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.meta.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.color.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.color.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.icons.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.themes.section.icons.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.provider.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.provider.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.default.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.default.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.updates.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.updates.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.geofence.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.map.section.geofence.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.fences.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.fences.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.hooks.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.hooks.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.api.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.api.general.desc"
+msgstr ""
+
+msgid "setting.permissions.level.admin.updates.general.name"
+msgstr ""
+
+msgid "setting.permissions.level.admin.updates.general.desc"
+msgstr ""
+
+msgid "setting.security.approval.require.name"
+msgstr ""
+
+msgid "setting.security.approval.require.desc"
+msgstr ""
+
+msgid "setting.security.approval.require.label"
+msgstr ""
+
+msgid "setting.security.approval.by_qr.name"
+msgstr ""
+
+msgid "setting.security.approval.by_qr.desc"
+msgstr ""
+
+msgid "setting.security.approval.by_qr.label"
+msgstr ""
+
+msgid "setting.auth.session_length.name"
+msgstr ""
+
+msgid "setting.auth.session_length.desc"
+msgstr ""
+
+msgid "setting.auth.session_length.option.86400"
+msgstr ""
+
+msgid "setting.auth.session_length.option.604800"
+msgstr ""
+
+msgid "setting.auth.session_length.option.2592000"
+msgstr ""
+
+msgid "setting.auth.session_length.option.7776000"
+msgstr ""
+
+msgid "setting.auth.session_length.option.15811200"
+msgstr ""
+
+msgid "setting.auth.session_length.option.31536000"
+msgstr ""
+
+msgid "setting.auth.session_length.option.63072000"
+msgstr ""
+
+msgid "setting.auth.session_length.option.157766400"
+msgstr ""
+
+msgid "setting.auth.session_length.option.315619200"
+msgstr ""
+
+msgid "setting.security.validate_ua.name"
+msgstr ""
+
+msgid "setting.security.validate_ua.desc"
+msgstr ""
+
+msgid "setting.security.validate_ua.option.no"
+msgstr ""
+
+msgid "setting.security.validate_ua.option.lenient"
+msgstr ""
+
+msgid "setting.security.validate_ua.option.strict"
+msgstr ""
+
+msgid "setting.security.validate_lang.name"
+msgstr ""
+
+msgid "setting.security.validate_lang.desc"
+msgstr ""
+
+msgid "setting.security.validate_lang.label"
+msgstr ""
+
+msgid "setting.security.selector_canary.name"
+msgstr ""
+
+msgid "setting.security.selector_canary.desc"
+msgstr ""
+
+msgid "setting.security.selector_canary.label"
+msgstr ""
+
+msgid "setting.security.curl.verify_certificates.name"
+msgstr ""
+
+msgid "setting.security.curl.verify_certificates.desc"
+msgstr ""
+
+msgid "setting.security.curl.verify_certificates.label"
+msgstr ""
+
+msgid "setting.security.curl.cacert_path.name"
+msgstr ""
+
+msgid "setting.security.curl.cacert_path.desc"
+msgstr ""
+
+msgid "setting.security.frame_options.name"
+msgstr ""
+
+msgid "setting.security.frame_options.desc"
+msgstr ""
+
+msgid "setting.security.frame_options.option.allow"
+msgstr ""
+
+msgid "setting.security.frame_options.option.sameorigin"
+msgstr ""
+
+msgid "setting.security.frame_options.option.deny"
+msgstr ""
+
+msgid "setting.auth.provider.discord.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.discord.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.discord.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.discord.client_id.name"
+msgstr ""
+
+msgid "setting.auth.provider.discord.client_id.desc"
+msgstr ""
+
+msgid "setting.auth.provider.discord.client_secret.name"
+msgstr ""
+
+msgid "setting.auth.provider.discord.client_secret.desc"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.bot_username.name"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.bot_username.desc"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.bot_token.name"
+msgstr ""
+
+msgid "setting.auth.provider.telegram.bot_token.desc"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.client_id.name"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.client_id.desc"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.client_secret.name"
+msgstr ""
+
+msgid "setting.auth.provider.reddit.client_secret.desc"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.app_id.name"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.app_id.desc"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.app_secret.name"
+msgstr ""
+
+msgid "setting.auth.provider.facebook.app_secret.desc"
+msgstr ""
+
+msgid "setting.auth.provider.line.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.line.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.line.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.line.channel_id.name"
+msgstr ""
+
+msgid "setting.auth.provider.line.channel_id.desc"
+msgstr ""
+
+msgid "setting.auth.provider.line.channel_secret.name"
+msgstr ""
+
+msgid "setting.auth.provider.line.channel_secret.desc"
+msgstr ""
+
+msgid "setting.auth.provider.groupme.enabled.name"
+msgstr ""
+
+msgid "setting.auth.provider.groupme.enabled.desc"
+msgstr ""
+
+msgid "setting.auth.provider.groupme.enabled.label"
+msgstr ""
+
+msgid "setting.auth.provider.groupme.client_id.name"
+msgstr ""
+
+msgid "setting.auth.provider.groupme.client_id.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.enabled.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.enabled.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.enabled.label"
+msgstr ""
+
+msgid "setting.mobile.pwa.name.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.name.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.short_name.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.short_name.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.description.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.description.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.option.fullscreen"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.option.standalone"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.option.minimal_ui"
+msgstr ""
+
+msgid "setting.mobile.pwa.display.option.browser"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.192px.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.192px.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.512px.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.512px.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.launch.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.icon.launch.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.color.background.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.color.background.desc"
+msgstr ""
+
+msgid "setting.mobile.pwa.color.foreground.name"
+msgstr ""
+
+msgid "setting.mobile.pwa.color.foreground.desc"
+msgstr ""
+
+msgid "setting.themes.meta.favicon.name"
+msgstr ""
+
+msgid "setting.themes.meta.favicon.desc"
+msgstr ""
+
+msgid "setting.themes.meta.color.name"
+msgstr ""
+
+msgid "setting.themes.meta.color.desc"
+msgstr ""
+
+msgid "setting.themes.color.site.name"
+msgstr ""
+
+msgid "setting.themes.color.site.desc"
+msgstr ""
+
+msgid "setting.themes.color.admin.name"
+msgstr ""
+
+msgid "setting.themes.color.admin.desc"
+msgstr ""
+
+msgid "setting.themes.color.admin.option.light"
+msgstr ""
+
+msgid "setting.themes.color.admin.option.dark"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.theme.name"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.theme.desc"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.theme.option.light"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.theme.option.dark"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.allow_personalization.name"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.allow_personalization.desc"
+msgstr ""
+
+msgid "setting.themes.color.user_settings.allow_personalization.label"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.name"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.desc"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.basic"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.streets"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.bright"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.light"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.dark"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.mapbox.option.satellite"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.name"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.desc"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.cycle"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.transport"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.landscape"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.outdoors"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.transport_dark"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.spinal_map"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.pioneer"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.mobile_atlas"
+msgstr ""
+
+msgid "setting.themes.color.map.theme.thunderforest.option.neighbourhood"
+msgstr ""
+
+msgid "setting.themes.color.map.allow_personalization.name"
+msgstr ""
+
+msgid "setting.themes.color.map.allow_personalization.desc"
+msgstr ""
+
+msgid "setting.themes.color.map.allow_personalization.label"
+msgstr ""
+
+msgid "setting.themes.icons.default.name"
+msgstr ""
+
+msgid "setting.themes.icons.default.desc"
+msgstr ""
+
+msgid "setting.themes.species.default.name"
+msgstr ""
+
+msgid "setting.themes.species.default.desc"
+msgstr ""
+
+msgid "setting.map.provider.source.name"
+msgstr ""
+
+msgid "setting.map.provider.source.desc"
+msgstr ""
+
+msgid "setting.map.provider.source.option.mapbox"
+msgstr ""
+
+msgid "setting.map.provider.source.option.thunderforest"
+msgstr ""
+
+msgid "setting.map.provider.mapbox.access_token.name"
+msgstr ""
+
+msgid "setting.map.provider.mapbox.access_token.desc"
+msgstr ""
+
+msgid "setting.map.provider.thunderforest.api_key.name"
+msgstr ""
+
+msgid "setting.map.provider.thunderforest.api_key.desc"
+msgstr ""
+
+msgid "setting.map.provider.directions.name"
+msgstr ""
+
+msgid "setting.map.provider.directions.desc"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.baidu"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.bing"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.google"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.here"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.mapquest"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.waze"
+msgstr ""
+
+msgid "setting.map.provider.directions.option.yandex"
+msgstr ""
+
+msgid "setting.map.default.center.latitude.name"
+msgstr ""
+
+msgid "setting.map.default.center.latitude.desc"
+msgstr ""
+
+msgid "setting.map.default.center.longitude.name"
+msgstr ""
+
+msgid "setting.map.default.center.longitude.desc"
+msgstr ""
+
+msgid "setting.map.default.zoom.name"
+msgstr ""
+
+msgid "setting.map.default.zoom.desc"
+msgstr ""
+
+msgid "setting.map.default.marker_component.name"
+msgstr ""
+
+msgid "setting.map.default.marker_component.desc"
+msgstr ""
+
+msgid "setting.map.default.marker_component.option.objective"
+msgstr ""
+
+msgid "setting.map.default.marker_component.option.reward"
+msgstr ""
+
+msgid "setting.map.default.cluster_limit.name"
+msgstr ""
+
+msgid "setting.map.default.cluster_limit.desc"
+msgstr ""
+
+msgid "setting.map.updates.refresh_interval.name"
+msgstr ""
+
+msgid "setting.map.updates.refresh_interval.desc"
+msgstr ""
+
+msgid "setting.map.updates.tz.name"
+msgstr ""
+
+msgid "setting.map.updates.tz.desc"
+msgstr ""
+
+msgid "setting.map.geofence.geofence.name"
+msgstr ""
+
+msgid "setting.map.geofence.geofence.desc"
+msgstr ""
+
+msgid "setting.map.geofence.hide_outside.name"
+msgstr ""
+
+msgid "setting.map.geofence.hide_outside.desc"
+msgstr ""
+
+msgid "setting.map.geofence.hide_outside.label"
+msgstr ""
+
+msgid "setting.hooks.hook_list.webhook_url.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.language.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.icons.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.icons.option.default"
+msgstr ""
+
+msgid "setting.hooks.hook_list.show_species.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.show_species.label"
+msgstr ""
+
+msgid "setting.hooks.hook_list.species.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.species.option.default"
+msgstr ""
+
+msgid "setting.hooks.hook_list.geofence.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.filter_mode.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.filter_mode.objective.option.whitelist.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.filter_mode.objective.option.blacklist.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.filter_mode.reward.option.whitelist.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.filter_mode.reward.option.blacklist.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.actions.name"
+msgstr ""
+
+msgid "setting.hooks.hook_list.actions.option.none"
+msgstr ""
+
+msgid "setting.hooks.hook_list.actions.option.enable"
+msgstr ""
+
+msgid "setting.hooks.hook_list.actions.option.disable"
+msgstr ""
+
+msgid "setting.hooks.hook_list.actions.option.delete"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.tg.groups.select.name"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.current"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.other"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.select"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.bot_token.name"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.name"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.txt"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.md"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.html"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_web_page_preview.name"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_web_page_preview.label"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_notification.name"
+msgstr ""
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_notification.label"
+msgstr ""
+
+msgid "setting.hooks.add.type.name"
+msgstr ""
+
+msgid "setting.hooks.add.type.option.json"
+msgstr ""
+
+msgid "setting.hooks.add.type.option.telegram"
+msgstr ""
+
+msgid "setting.hooks.add.preset.name"
+msgstr ""
+
+msgid "setting.hooks.add.preset.option.none"
+msgstr ""
+
+msgid "setting.updates.current.name"
+msgstr ""
+
+msgid "setting.updates.current.desc"
+msgstr ""
+
+msgid "setting.updates.last_check.name"
+msgstr ""
+
+msgid "setting.updates.last_check.desc"
+msgstr ""
+
+msgid "setting.updates.next_check.name"
+msgstr ""
+
+msgid "setting.updates.next_check.desc"
+msgstr ""
+
+msgid "setting.updates.check_now.name"
+msgstr ""
+
+msgid "setting.updates.check_now.desc"
+msgstr ""
+
+msgid "setting.updates.check_now.button"
+msgstr ""
+
+msgid "setting.updates.latest.name"
+msgstr ""
+
+msgid "setting.updates.latest.desc"
+msgstr ""
+
+msgid "setting.updates.type.name"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/sidebar.po b/includes/i18n/de-DE/sidebar.po
new file mode 100644
index 00000000..ea51d7b5
--- /dev/null
+++ b/includes/i18n/de-DE/sidebar.po
@@ -0,0 +1,98 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/sidebar.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "sidebar.signed_in_as"
+msgstr ""
+
+msgid "sidebar.approval_pending"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.logout"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.login"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.show_motd"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.return"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.add_poi"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.filters"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.search"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.settings"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.manage_site"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.label"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.auto"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.device"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.select"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.reset"
+msgstr ""
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.cancel"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/species.po b/includes/i18n/de-DE/species.po
new file mode 100644
index 00000000..c43f9a3d
--- /dev/null
+++ b/includes/i18n/de-DE/species.po
@@ -0,0 +1,1501 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/species.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# Note: These should only be translated if an official translation exists for
+# these species in the language you are translating to. E.g. in German, the
+# official translation of "Snorlax" is "Relaxo." ONLY TRANSLATE THESE IF SUCH
+# AN OFFICIAL TRANSLATION EXISTS FOR YOUR LANGUAGE. LEAVE THIS FILE WITHOUT A
+# TRANSLATION IF NO OFFICIAL TRANSLATION IS AVAILABLE FOR YOUR LANGUAGE.
+msgid "species.1.name"
+msgstr ""
+
+msgid "species.2.name"
+msgstr ""
+
+msgid "species.3.name"
+msgstr ""
+
+msgid "species.4.name"
+msgstr ""
+
+msgid "species.5.name"
+msgstr ""
+
+msgid "species.6.name"
+msgstr ""
+
+msgid "species.7.name"
+msgstr ""
+
+msgid "species.8.name"
+msgstr ""
+
+msgid "species.9.name"
+msgstr ""
+
+msgid "species.10.name"
+msgstr ""
+
+msgid "species.11.name"
+msgstr ""
+
+msgid "species.12.name"
+msgstr ""
+
+msgid "species.13.name"
+msgstr ""
+
+msgid "species.14.name"
+msgstr ""
+
+msgid "species.15.name"
+msgstr ""
+
+msgid "species.16.name"
+msgstr ""
+
+msgid "species.17.name"
+msgstr ""
+
+msgid "species.18.name"
+msgstr ""
+
+msgid "species.19.name"
+msgstr ""
+
+msgid "species.20.name"
+msgstr ""
+
+msgid "species.21.name"
+msgstr ""
+
+msgid "species.22.name"
+msgstr ""
+
+msgid "species.23.name"
+msgstr ""
+
+msgid "species.24.name"
+msgstr ""
+
+msgid "species.25.name"
+msgstr ""
+
+msgid "species.26.name"
+msgstr ""
+
+msgid "species.27.name"
+msgstr ""
+
+msgid "species.28.name"
+msgstr ""
+
+msgid "species.29.name"
+msgstr ""
+
+msgid "species.30.name"
+msgstr ""
+
+msgid "species.31.name"
+msgstr ""
+
+msgid "species.32.name"
+msgstr ""
+
+msgid "species.33.name"
+msgstr ""
+
+msgid "species.34.name"
+msgstr ""
+
+msgid "species.35.name"
+msgstr ""
+
+msgid "species.36.name"
+msgstr ""
+
+msgid "species.37.name"
+msgstr ""
+
+msgid "species.38.name"
+msgstr ""
+
+msgid "species.39.name"
+msgstr ""
+
+msgid "species.40.name"
+msgstr ""
+
+msgid "species.41.name"
+msgstr ""
+
+msgid "species.42.name"
+msgstr ""
+
+msgid "species.43.name"
+msgstr ""
+
+msgid "species.44.name"
+msgstr ""
+
+msgid "species.45.name"
+msgstr ""
+
+msgid "species.46.name"
+msgstr ""
+
+msgid "species.47.name"
+msgstr ""
+
+msgid "species.48.name"
+msgstr ""
+
+msgid "species.49.name"
+msgstr ""
+
+msgid "species.50.name"
+msgstr ""
+
+msgid "species.51.name"
+msgstr ""
+
+msgid "species.52.name"
+msgstr ""
+
+msgid "species.53.name"
+msgstr ""
+
+msgid "species.54.name"
+msgstr ""
+
+msgid "species.55.name"
+msgstr ""
+
+msgid "species.56.name"
+msgstr ""
+
+msgid "species.57.name"
+msgstr ""
+
+msgid "species.58.name"
+msgstr ""
+
+msgid "species.59.name"
+msgstr ""
+
+msgid "species.60.name"
+msgstr ""
+
+msgid "species.61.name"
+msgstr ""
+
+msgid "species.62.name"
+msgstr ""
+
+msgid "species.63.name"
+msgstr ""
+
+msgid "species.64.name"
+msgstr ""
+
+msgid "species.65.name"
+msgstr ""
+
+msgid "species.66.name"
+msgstr ""
+
+msgid "species.67.name"
+msgstr ""
+
+msgid "species.68.name"
+msgstr ""
+
+msgid "species.69.name"
+msgstr ""
+
+msgid "species.70.name"
+msgstr ""
+
+msgid "species.71.name"
+msgstr ""
+
+msgid "species.72.name"
+msgstr ""
+
+msgid "species.73.name"
+msgstr ""
+
+msgid "species.74.name"
+msgstr ""
+
+msgid "species.75.name"
+msgstr ""
+
+msgid "species.76.name"
+msgstr ""
+
+msgid "species.77.name"
+msgstr ""
+
+msgid "species.78.name"
+msgstr ""
+
+msgid "species.79.name"
+msgstr ""
+
+msgid "species.80.name"
+msgstr ""
+
+msgid "species.81.name"
+msgstr ""
+
+msgid "species.82.name"
+msgstr ""
+
+msgid "species.83.name"
+msgstr ""
+
+msgid "species.84.name"
+msgstr ""
+
+msgid "species.85.name"
+msgstr ""
+
+msgid "species.86.name"
+msgstr ""
+
+msgid "species.87.name"
+msgstr ""
+
+msgid "species.88.name"
+msgstr ""
+
+msgid "species.89.name"
+msgstr ""
+
+msgid "species.90.name"
+msgstr ""
+
+msgid "species.91.name"
+msgstr ""
+
+msgid "species.92.name"
+msgstr ""
+
+msgid "species.93.name"
+msgstr ""
+
+msgid "species.94.name"
+msgstr ""
+
+msgid "species.95.name"
+msgstr ""
+
+msgid "species.96.name"
+msgstr ""
+
+msgid "species.97.name"
+msgstr ""
+
+msgid "species.98.name"
+msgstr ""
+
+msgid "species.99.name"
+msgstr ""
+
+msgid "species.100.name"
+msgstr ""
+
+msgid "species.101.name"
+msgstr ""
+
+msgid "species.102.name"
+msgstr ""
+
+msgid "species.103.name"
+msgstr ""
+
+msgid "species.104.name"
+msgstr ""
+
+msgid "species.105.name"
+msgstr ""
+
+msgid "species.106.name"
+msgstr ""
+
+msgid "species.107.name"
+msgstr ""
+
+msgid "species.108.name"
+msgstr ""
+
+msgid "species.109.name"
+msgstr ""
+
+msgid "species.110.name"
+msgstr ""
+
+msgid "species.111.name"
+msgstr ""
+
+msgid "species.112.name"
+msgstr ""
+
+msgid "species.113.name"
+msgstr ""
+
+msgid "species.114.name"
+msgstr ""
+
+msgid "species.115.name"
+msgstr ""
+
+msgid "species.116.name"
+msgstr ""
+
+msgid "species.117.name"
+msgstr ""
+
+msgid "species.118.name"
+msgstr ""
+
+msgid "species.119.name"
+msgstr ""
+
+msgid "species.120.name"
+msgstr ""
+
+msgid "species.121.name"
+msgstr ""
+
+msgid "species.122.name"
+msgstr ""
+
+msgid "species.123.name"
+msgstr ""
+
+msgid "species.124.name"
+msgstr ""
+
+msgid "species.125.name"
+msgstr ""
+
+msgid "species.126.name"
+msgstr ""
+
+msgid "species.127.name"
+msgstr ""
+
+msgid "species.128.name"
+msgstr ""
+
+msgid "species.129.name"
+msgstr ""
+
+msgid "species.130.name"
+msgstr ""
+
+msgid "species.131.name"
+msgstr ""
+
+msgid "species.132.name"
+msgstr ""
+
+msgid "species.133.name"
+msgstr ""
+
+msgid "species.134.name"
+msgstr ""
+
+msgid "species.135.name"
+msgstr ""
+
+msgid "species.136.name"
+msgstr ""
+
+msgid "species.137.name"
+msgstr ""
+
+msgid "species.138.name"
+msgstr ""
+
+msgid "species.139.name"
+msgstr ""
+
+msgid "species.140.name"
+msgstr ""
+
+msgid "species.141.name"
+msgstr ""
+
+msgid "species.142.name"
+msgstr ""
+
+msgid "species.143.name"
+msgstr ""
+
+msgid "species.144.name"
+msgstr ""
+
+msgid "species.145.name"
+msgstr ""
+
+msgid "species.146.name"
+msgstr ""
+
+msgid "species.147.name"
+msgstr ""
+
+msgid "species.148.name"
+msgstr ""
+
+msgid "species.149.name"
+msgstr ""
+
+msgid "species.150.name"
+msgstr ""
+
+msgid "species.151.name"
+msgstr ""
+
+msgid "species.152.name"
+msgstr ""
+
+msgid "species.153.name"
+msgstr ""
+
+msgid "species.154.name"
+msgstr ""
+
+msgid "species.155.name"
+msgstr ""
+
+msgid "species.156.name"
+msgstr ""
+
+msgid "species.157.name"
+msgstr ""
+
+msgid "species.158.name"
+msgstr ""
+
+msgid "species.159.name"
+msgstr ""
+
+msgid "species.160.name"
+msgstr ""
+
+msgid "species.161.name"
+msgstr ""
+
+msgid "species.162.name"
+msgstr ""
+
+msgid "species.163.name"
+msgstr ""
+
+msgid "species.164.name"
+msgstr ""
+
+msgid "species.165.name"
+msgstr ""
+
+msgid "species.166.name"
+msgstr ""
+
+msgid "species.167.name"
+msgstr ""
+
+msgid "species.168.name"
+msgstr ""
+
+msgid "species.169.name"
+msgstr ""
+
+msgid "species.170.name"
+msgstr ""
+
+msgid "species.171.name"
+msgstr ""
+
+msgid "species.172.name"
+msgstr ""
+
+msgid "species.173.name"
+msgstr ""
+
+msgid "species.174.name"
+msgstr ""
+
+msgid "species.175.name"
+msgstr ""
+
+msgid "species.176.name"
+msgstr ""
+
+msgid "species.177.name"
+msgstr ""
+
+msgid "species.178.name"
+msgstr ""
+
+msgid "species.179.name"
+msgstr ""
+
+msgid "species.180.name"
+msgstr ""
+
+msgid "species.181.name"
+msgstr ""
+
+msgid "species.182.name"
+msgstr ""
+
+msgid "species.183.name"
+msgstr ""
+
+msgid "species.184.name"
+msgstr ""
+
+msgid "species.185.name"
+msgstr ""
+
+msgid "species.186.name"
+msgstr ""
+
+msgid "species.187.name"
+msgstr ""
+
+msgid "species.188.name"
+msgstr ""
+
+msgid "species.189.name"
+msgstr ""
+
+msgid "species.190.name"
+msgstr ""
+
+msgid "species.191.name"
+msgstr ""
+
+msgid "species.192.name"
+msgstr ""
+
+msgid "species.193.name"
+msgstr ""
+
+msgid "species.194.name"
+msgstr ""
+
+msgid "species.195.name"
+msgstr ""
+
+msgid "species.196.name"
+msgstr ""
+
+msgid "species.197.name"
+msgstr ""
+
+msgid "species.198.name"
+msgstr ""
+
+msgid "species.199.name"
+msgstr ""
+
+msgid "species.200.name"
+msgstr ""
+
+msgid "species.201.name"
+msgstr ""
+
+msgid "species.202.name"
+msgstr ""
+
+msgid "species.203.name"
+msgstr ""
+
+msgid "species.204.name"
+msgstr ""
+
+msgid "species.205.name"
+msgstr ""
+
+msgid "species.206.name"
+msgstr ""
+
+msgid "species.207.name"
+msgstr ""
+
+msgid "species.208.name"
+msgstr ""
+
+msgid "species.209.name"
+msgstr ""
+
+msgid "species.210.name"
+msgstr ""
+
+msgid "species.211.name"
+msgstr ""
+
+msgid "species.212.name"
+msgstr ""
+
+msgid "species.213.name"
+msgstr ""
+
+msgid "species.214.name"
+msgstr ""
+
+msgid "species.215.name"
+msgstr ""
+
+msgid "species.216.name"
+msgstr ""
+
+msgid "species.217.name"
+msgstr ""
+
+msgid "species.218.name"
+msgstr ""
+
+msgid "species.219.name"
+msgstr ""
+
+msgid "species.220.name"
+msgstr ""
+
+msgid "species.221.name"
+msgstr ""
+
+msgid "species.222.name"
+msgstr ""
+
+msgid "species.223.name"
+msgstr ""
+
+msgid "species.224.name"
+msgstr ""
+
+msgid "species.225.name"
+msgstr ""
+
+msgid "species.226.name"
+msgstr ""
+
+msgid "species.227.name"
+msgstr ""
+
+msgid "species.228.name"
+msgstr ""
+
+msgid "species.229.name"
+msgstr ""
+
+msgid "species.230.name"
+msgstr ""
+
+msgid "species.231.name"
+msgstr ""
+
+msgid "species.232.name"
+msgstr ""
+
+msgid "species.233.name"
+msgstr ""
+
+msgid "species.234.name"
+msgstr ""
+
+msgid "species.235.name"
+msgstr ""
+
+msgid "species.236.name"
+msgstr ""
+
+msgid "species.237.name"
+msgstr ""
+
+msgid "species.238.name"
+msgstr ""
+
+msgid "species.239.name"
+msgstr ""
+
+msgid "species.240.name"
+msgstr ""
+
+msgid "species.241.name"
+msgstr ""
+
+msgid "species.242.name"
+msgstr ""
+
+msgid "species.243.name"
+msgstr ""
+
+msgid "species.244.name"
+msgstr ""
+
+msgid "species.245.name"
+msgstr ""
+
+msgid "species.246.name"
+msgstr ""
+
+msgid "species.247.name"
+msgstr ""
+
+msgid "species.248.name"
+msgstr ""
+
+msgid "species.249.name"
+msgstr ""
+
+msgid "species.250.name"
+msgstr ""
+
+msgid "species.251.name"
+msgstr ""
+
+msgid "species.252.name"
+msgstr ""
+
+msgid "species.253.name"
+msgstr ""
+
+msgid "species.254.name"
+msgstr ""
+
+msgid "species.255.name"
+msgstr ""
+
+msgid "species.256.name"
+msgstr ""
+
+msgid "species.257.name"
+msgstr ""
+
+msgid "species.258.name"
+msgstr ""
+
+msgid "species.259.name"
+msgstr ""
+
+msgid "species.260.name"
+msgstr ""
+
+msgid "species.261.name"
+msgstr ""
+
+msgid "species.262.name"
+msgstr ""
+
+msgid "species.263.name"
+msgstr ""
+
+msgid "species.264.name"
+msgstr ""
+
+msgid "species.265.name"
+msgstr ""
+
+msgid "species.266.name"
+msgstr ""
+
+msgid "species.267.name"
+msgstr ""
+
+msgid "species.268.name"
+msgstr ""
+
+msgid "species.269.name"
+msgstr ""
+
+msgid "species.270.name"
+msgstr ""
+
+msgid "species.271.name"
+msgstr ""
+
+msgid "species.272.name"
+msgstr ""
+
+msgid "species.273.name"
+msgstr ""
+
+msgid "species.274.name"
+msgstr ""
+
+msgid "species.275.name"
+msgstr ""
+
+msgid "species.276.name"
+msgstr ""
+
+msgid "species.277.name"
+msgstr ""
+
+msgid "species.278.name"
+msgstr ""
+
+msgid "species.279.name"
+msgstr ""
+
+msgid "species.280.name"
+msgstr ""
+
+msgid "species.281.name"
+msgstr ""
+
+msgid "species.282.name"
+msgstr ""
+
+msgid "species.283.name"
+msgstr ""
+
+msgid "species.284.name"
+msgstr ""
+
+msgid "species.285.name"
+msgstr ""
+
+msgid "species.286.name"
+msgstr ""
+
+msgid "species.287.name"
+msgstr ""
+
+msgid "species.288.name"
+msgstr ""
+
+msgid "species.289.name"
+msgstr ""
+
+msgid "species.290.name"
+msgstr ""
+
+msgid "species.291.name"
+msgstr ""
+
+msgid "species.292.name"
+msgstr ""
+
+msgid "species.293.name"
+msgstr ""
+
+msgid "species.294.name"
+msgstr ""
+
+msgid "species.295.name"
+msgstr ""
+
+msgid "species.296.name"
+msgstr ""
+
+msgid "species.297.name"
+msgstr ""
+
+msgid "species.298.name"
+msgstr ""
+
+msgid "species.299.name"
+msgstr ""
+
+msgid "species.300.name"
+msgstr ""
+
+msgid "species.301.name"
+msgstr ""
+
+msgid "species.302.name"
+msgstr ""
+
+msgid "species.303.name"
+msgstr ""
+
+msgid "species.304.name"
+msgstr ""
+
+msgid "species.305.name"
+msgstr ""
+
+msgid "species.306.name"
+msgstr ""
+
+msgid "species.307.name"
+msgstr ""
+
+msgid "species.308.name"
+msgstr ""
+
+msgid "species.309.name"
+msgstr ""
+
+msgid "species.310.name"
+msgstr ""
+
+msgid "species.311.name"
+msgstr ""
+
+msgid "species.312.name"
+msgstr ""
+
+msgid "species.313.name"
+msgstr ""
+
+msgid "species.314.name"
+msgstr ""
+
+msgid "species.315.name"
+msgstr ""
+
+msgid "species.316.name"
+msgstr ""
+
+msgid "species.317.name"
+msgstr ""
+
+msgid "species.318.name"
+msgstr ""
+
+msgid "species.319.name"
+msgstr ""
+
+msgid "species.320.name"
+msgstr ""
+
+msgid "species.321.name"
+msgstr ""
+
+msgid "species.322.name"
+msgstr ""
+
+msgid "species.323.name"
+msgstr ""
+
+msgid "species.324.name"
+msgstr ""
+
+msgid "species.325.name"
+msgstr ""
+
+msgid "species.326.name"
+msgstr ""
+
+msgid "species.327.name"
+msgstr ""
+
+msgid "species.328.name"
+msgstr ""
+
+msgid "species.329.name"
+msgstr ""
+
+msgid "species.330.name"
+msgstr ""
+
+msgid "species.331.name"
+msgstr ""
+
+msgid "species.332.name"
+msgstr ""
+
+msgid "species.333.name"
+msgstr ""
+
+msgid "species.334.name"
+msgstr ""
+
+msgid "species.335.name"
+msgstr ""
+
+msgid "species.336.name"
+msgstr ""
+
+msgid "species.337.name"
+msgstr ""
+
+msgid "species.338.name"
+msgstr ""
+
+msgid "species.339.name"
+msgstr ""
+
+msgid "species.340.name"
+msgstr ""
+
+msgid "species.341.name"
+msgstr ""
+
+msgid "species.342.name"
+msgstr ""
+
+msgid "species.343.name"
+msgstr ""
+
+msgid "species.344.name"
+msgstr ""
+
+msgid "species.345.name"
+msgstr ""
+
+msgid "species.346.name"
+msgstr ""
+
+msgid "species.347.name"
+msgstr ""
+
+msgid "species.348.name"
+msgstr ""
+
+msgid "species.349.name"
+msgstr ""
+
+msgid "species.350.name"
+msgstr ""
+
+msgid "species.351.name"
+msgstr ""
+
+msgid "species.352.name"
+msgstr ""
+
+msgid "species.353.name"
+msgstr ""
+
+msgid "species.354.name"
+msgstr ""
+
+msgid "species.355.name"
+msgstr ""
+
+msgid "species.356.name"
+msgstr ""
+
+msgid "species.357.name"
+msgstr ""
+
+msgid "species.358.name"
+msgstr ""
+
+msgid "species.359.name"
+msgstr ""
+
+msgid "species.360.name"
+msgstr ""
+
+msgid "species.361.name"
+msgstr ""
+
+msgid "species.362.name"
+msgstr ""
+
+msgid "species.363.name"
+msgstr ""
+
+msgid "species.364.name"
+msgstr ""
+
+msgid "species.365.name"
+msgstr ""
+
+msgid "species.366.name"
+msgstr ""
+
+msgid "species.367.name"
+msgstr ""
+
+msgid "species.368.name"
+msgstr ""
+
+msgid "species.369.name"
+msgstr ""
+
+msgid "species.370.name"
+msgstr ""
+
+msgid "species.371.name"
+msgstr ""
+
+msgid "species.372.name"
+msgstr ""
+
+msgid "species.373.name"
+msgstr ""
+
+msgid "species.374.name"
+msgstr ""
+
+msgid "species.375.name"
+msgstr ""
+
+msgid "species.376.name"
+msgstr ""
+
+msgid "species.377.name"
+msgstr ""
+
+msgid "species.378.name"
+msgstr ""
+
+msgid "species.379.name"
+msgstr ""
+
+msgid "species.380.name"
+msgstr ""
+
+msgid "species.381.name"
+msgstr ""
+
+msgid "species.382.name"
+msgstr ""
+
+msgid "species.383.name"
+msgstr ""
+
+msgid "species.384.name"
+msgstr ""
+
+msgid "species.385.name"
+msgstr ""
+
+msgid "species.386.name"
+msgstr ""
+
+msgid "species.387.name"
+msgstr ""
+
+msgid "species.388.name"
+msgstr ""
+
+msgid "species.389.name"
+msgstr ""
+
+msgid "species.390.name"
+msgstr ""
+
+msgid "species.391.name"
+msgstr ""
+
+msgid "species.392.name"
+msgstr ""
+
+msgid "species.393.name"
+msgstr ""
+
+msgid "species.394.name"
+msgstr ""
+
+msgid "species.395.name"
+msgstr ""
+
+msgid "species.396.name"
+msgstr ""
+
+msgid "species.397.name"
+msgstr ""
+
+msgid "species.398.name"
+msgstr ""
+
+msgid "species.399.name"
+msgstr ""
+
+msgid "species.400.name"
+msgstr ""
+
+msgid "species.401.name"
+msgstr ""
+
+msgid "species.402.name"
+msgstr ""
+
+msgid "species.403.name"
+msgstr ""
+
+msgid "species.404.name"
+msgstr ""
+
+msgid "species.405.name"
+msgstr ""
+
+msgid "species.406.name"
+msgstr ""
+
+msgid "species.407.name"
+msgstr ""
+
+msgid "species.408.name"
+msgstr ""
+
+msgid "species.409.name"
+msgstr ""
+
+msgid "species.410.name"
+msgstr ""
+
+msgid "species.411.name"
+msgstr ""
+
+msgid "species.412.name"
+msgstr ""
+
+msgid "species.413.name"
+msgstr ""
+
+msgid "species.414.name"
+msgstr ""
+
+msgid "species.415.name"
+msgstr ""
+
+msgid "species.416.name"
+msgstr ""
+
+msgid "species.417.name"
+msgstr ""
+
+msgid "species.418.name"
+msgstr ""
+
+msgid "species.419.name"
+msgstr ""
+
+msgid "species.420.name"
+msgstr ""
+
+msgid "species.421.name"
+msgstr ""
+
+msgid "species.422.name"
+msgstr ""
+
+msgid "species.423.name"
+msgstr ""
+
+msgid "species.424.name"
+msgstr ""
+
+msgid "species.425.name"
+msgstr ""
+
+msgid "species.426.name"
+msgstr ""
+
+msgid "species.427.name"
+msgstr ""
+
+msgid "species.428.name"
+msgstr ""
+
+msgid "species.429.name"
+msgstr ""
+
+msgid "species.430.name"
+msgstr ""
+
+msgid "species.431.name"
+msgstr ""
+
+msgid "species.432.name"
+msgstr ""
+
+msgid "species.433.name"
+msgstr ""
+
+msgid "species.434.name"
+msgstr ""
+
+msgid "species.435.name"
+msgstr ""
+
+msgid "species.436.name"
+msgstr ""
+
+msgid "species.437.name"
+msgstr ""
+
+msgid "species.438.name"
+msgstr ""
+
+msgid "species.439.name"
+msgstr ""
+
+msgid "species.440.name"
+msgstr ""
+
+msgid "species.441.name"
+msgstr ""
+
+msgid "species.442.name"
+msgstr ""
+
+msgid "species.443.name"
+msgstr ""
+
+msgid "species.444.name"
+msgstr ""
+
+msgid "species.445.name"
+msgstr ""
+
+msgid "species.446.name"
+msgstr ""
+
+msgid "species.447.name"
+msgstr ""
+
+msgid "species.448.name"
+msgstr ""
+
+msgid "species.449.name"
+msgstr ""
+
+msgid "species.450.name"
+msgstr ""
+
+msgid "species.451.name"
+msgstr ""
+
+msgid "species.452.name"
+msgstr ""
+
+msgid "species.453.name"
+msgstr ""
+
+msgid "species.454.name"
+msgstr ""
+
+msgid "species.455.name"
+msgstr ""
+
+msgid "species.456.name"
+msgstr ""
+
+msgid "species.457.name"
+msgstr ""
+
+msgid "species.458.name"
+msgstr ""
+
+msgid "species.459.name"
+msgstr ""
+
+msgid "species.460.name"
+msgstr ""
+
+msgid "species.461.name"
+msgstr ""
+
+msgid "species.462.name"
+msgstr ""
+
+msgid "species.463.name"
+msgstr ""
+
+msgid "species.464.name"
+msgstr ""
+
+msgid "species.465.name"
+msgstr ""
+
+msgid "species.466.name"
+msgstr ""
+
+msgid "species.467.name"
+msgstr ""
+
+msgid "species.468.name"
+msgstr ""
+
+msgid "species.469.name"
+msgstr ""
+
+msgid "species.470.name"
+msgstr ""
+
+msgid "species.471.name"
+msgstr ""
+
+msgid "species.472.name"
+msgstr ""
+
+msgid "species.473.name"
+msgstr ""
+
+msgid "species.474.name"
+msgstr ""
+
+msgid "species.475.name"
+msgstr ""
+
+msgid "species.476.name"
+msgstr ""
+
+msgid "species.477.name"
+msgstr ""
+
+msgid "species.478.name"
+msgstr ""
+
+msgid "species.479.name"
+msgstr ""
+
+msgid "species.480.name"
+msgstr ""
+
+msgid "species.481.name"
+msgstr ""
+
+msgid "species.482.name"
+msgstr ""
+
+msgid "species.483.name"
+msgstr ""
+
+msgid "species.484.name"
+msgstr ""
+
+msgid "species.485.name"
+msgstr ""
+
+msgid "species.486.name"
+msgstr ""
+
+msgid "species.487.name"
+msgstr ""
+
+msgid "species.488.name"
+msgstr ""
+
+msgid "species.489.name"
+msgstr ""
+
+msgid "species.490.name"
+msgstr ""
+
+msgid "species.491.name"
+msgstr ""
+
+msgid "species.492.name"
+msgstr ""
+
+msgid "species.493.name"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/theme.po b/includes/i18n/de-DE/theme.po
new file mode 100644
index 00000000..536f57d6
--- /dev/null
+++ b/includes/i18n/de-DE/theme.po
@@ -0,0 +1,24 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/theme.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+# This string is used to display the name and author of each installed icon set
+# in the icon set drop-down selector. Example: "John's Amazing Map Markers (by
+# John Doe)"
+# %1 = Name of icon set, %2 = Author of icon set
+msgid "theme.name_label"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/type.po b/includes/i18n/de-DE/type.po
new file mode 100644
index 00000000..1960628b
--- /dev/null
+++ b/includes/i18n/de-DE/type.po
@@ -0,0 +1,71 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/type.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "type.normal"
+msgstr ""
+
+msgid "type.fighting"
+msgstr ""
+
+msgid "type.flying"
+msgstr ""
+
+msgid "type.poison"
+msgstr ""
+
+msgid "type.ground"
+msgstr ""
+
+msgid "type.rock"
+msgstr ""
+
+msgid "type.bug"
+msgstr ""
+
+msgid "type.ghost"
+msgstr ""
+
+msgid "type.steel"
+msgstr ""
+
+msgid "type.fire"
+msgstr ""
+
+msgid "type.water"
+msgstr ""
+
+msgid "type.grass"
+msgstr ""
+
+msgid "type.electric"
+msgstr ""
+
+msgid "type.psychic"
+msgstr ""
+
+msgid "type.ice"
+msgstr ""
+
+msgid "type.dragon"
+msgstr ""
+
+msgid "type.dark"
+msgstr ""
+
+msgid "type.fairy"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/ui.po b/includes/i18n/de-DE/ui.po
new file mode 100644
index 00000000..b2be3c24
--- /dev/null
+++ b/includes/i18n/de-DE/ui.po
@@ -0,0 +1,41 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/ui.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "ui.button.close"
+msgstr ""
+
+msgid "ui.button.cancel"
+msgstr ""
+
+msgid "ui.button.select"
+msgstr ""
+
+msgid "ui.button.save"
+msgstr ""
+
+msgid "ui.button.done"
+msgstr ""
+
+msgid "ui.button.retry"
+msgstr ""
+
+msgid "ui.dropdown.none_selected"
+msgstr ""
+
+msgid "ui.paginate.go_to"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/user_setting.po b/includes/i18n/de-DE/user_setting.po
new file mode 100644
index 00000000..9b43fbaf
--- /dev/null
+++ b/includes/i18n/de-DE/user_setting.po
@@ -0,0 +1,54 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/user_setting.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "user_setting.nickname.name"
+msgstr ""
+
+msgid "user_setting.sign_out_everywhere.name"
+msgstr ""
+
+msgid "user_setting.sign_out_everywhere.info"
+msgstr ""
+
+msgid "user_setting.sign_out_everywhere.button"
+msgstr ""
+
+msgid "user_setting.directions_provider.name"
+msgstr ""
+
+msgid "user_setting.interface_theme.name"
+msgstr ""
+
+msgid "user_setting.map_theme.name"
+msgstr ""
+
+msgid "user_setting.icons.name"
+msgstr ""
+
+msgid "user_setting.species.name"
+msgstr ""
+
+msgid "user_setting.marker_component.name"
+msgstr ""
+
+msgid "user_setting.cluster_limit.name"
+msgstr ""
+
+# %1 = Number of POIs
+msgid "user_setting.cluster_limit.option.default"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/user_settings.po b/includes/i18n/de-DE/user_settings.po
new file mode 100644
index 00000000..5e3be4c0
--- /dev/null
+++ b/includes/i18n/de-DE/user_settings.po
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/user_settings.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "user_settings.no_local_storage"
+msgstr ""
+
+msgid "user_settings.reset.confirm"
+msgstr ""
+
+msgid "user_settings.value.default"
+msgstr ""
+
+msgid "user_settings.page.title"
+msgstr ""
+
+msgid "user_settings.page.subtitle"
+msgstr ""
+
+msgid "user_settings.section.account"
+msgstr ""
+
+msgid "user_settings.section.map_providers"
+msgstr ""
+
+msgid "user_settings.section.appearance"
+msgstr ""
+
+msgid "user_settings.section.performance"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/webhook.po b/includes/i18n/de-DE/webhook.po
new file mode 100644
index 00000000..6aad798e
--- /dev/null
+++ b/includes/i18n/de-DE/webhook.po
@@ -0,0 +1,41 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/webhook.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "webhook.report_title"
+msgstr ""
+
+msgid "webhook.poi"
+msgstr ""
+
+msgid "webhook.click_for_directions"
+msgstr ""
+
+msgid "webhook.objective"
+msgstr ""
+
+msgid "webhook.reward"
+msgstr ""
+
+# %1 = Nickname of user who reported research
+msgid "webhook.reported_by"
+msgstr ""
+
+# %1 = Research objective (e.g. "Make 3 Great Throws")
+# %2 = Research reward (e.g. "1 Max Revive")
+msgid "webhook.x_for_y"
+msgstr ""
+
diff --git a/includes/i18n/de-DE/xhr.po b/includes/i18n/de-DE/xhr.po
new file mode 100644
index 00000000..d3a0bdce
--- /dev/null
+++ b/includes/i18n/de-DE/xhr.po
@@ -0,0 +1,53 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: German\n"
+"Language: de_DE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: de\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/xhr.po\n"
+"PO-Revision-Date: 2019-06-06 11:26\n"
+
+msgid "xhr.failed.reason.unknown_reason"
+msgstr ""
+
+msgid "xhr.failed.reason.access_denied"
+msgstr ""
+
+msgid "xhr.failed.reason.missing_fields"
+msgstr ""
+
+msgid "xhr.failed.reason.invalid_data"
+msgstr ""
+
+msgid "xhr.failed.reason.database_error"
+msgstr ""
+
+msgid "xhr.failed.reason.http_405"
+msgstr ""
+
+msgid "xhr.failed.reason.timeout"
+msgstr ""
+
+msgid "xhr.failed.reason.upstream_failed"
+msgstr ""
+
+msgid "xhr.failed.reason.objective_null"
+msgstr ""
+
+msgid "xhr.failed.reason.reward_null"
+msgstr ""
+
+msgid "xhr.failed.reason.name_empty"
+msgstr ""
+
+msgid "xhr.failed.reason.invalid_location"
+msgstr ""
+
diff --git a/includes/i18n/es-ES/access_denied.po b/includes/i18n/es-ES/access_denied.po
index dedd0c52..b8477c11 100644
--- a/includes/i18n/es-ES/access_denied.po
+++ b/includes/i18n/es-ES/access_denied.po
@@ -13,15 +13,15 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/access_denied.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "access_denied.title"
-msgstr ""
+msgstr "Acceso denegado"
msgid "access_denied.desc"
-msgstr ""
+msgstr "No tienes permiso para ver esta página"
# %1 = User identifier
msgid "access_denied.info"
-msgstr ""
+msgstr "Tu cuenta de usuario ({%1}) no está autorizada a ver esta página. Esto podría suceder porque no tienes permisos para ver esta página, o si el sitio requiere verificación manual de cuentas, tu cuenta aún no ha sido aprobada. Por favor, contacta con un administrador si crees que esto es un error."
diff --git a/includes/i18n/es-ES/admin.po b/includes/i18n/es-ES/admin.po
index 736da20d..20025ef0 100644
--- a/includes/i18n/es-ES/admin.po
+++ b/includes/i18n/es-ES/admin.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/admin.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
# Paragraph text input above this string.
msgid "admin.option.paragraph.disclaimer"
diff --git a/includes/i18n/es-ES/approve_user.po b/includes/i18n/es-ES/approve_user.po
index 18076244..ca4fc687 100644
--- a/includes/i18n/es-ES/approve_user.po
+++ b/includes/i18n/es-ES/approve_user.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/approve_user.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
# Displayed if the user for whom the link was created visits the page.
msgid "approve_user.user.title"
diff --git a/includes/i18n/es-ES/awaiting_approval.po b/includes/i18n/es-ES/awaiting_approval.po
index 34a23666..480c6662 100644
--- a/includes/i18n/es-ES/awaiting_approval.po
+++ b/includes/i18n/es-ES/awaiting_approval.po
@@ -13,32 +13,32 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/awaiting_approval.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "awaiting_approval.title"
-msgstr ""
+msgstr "Se requiere aprobación"
msgid "awaiting_approval.desc"
-msgstr ""
+msgstr "Su cuenta está esperando aprobación manual"
msgid "awaiting_approval.info.1"
-msgstr ""
+msgstr "Thank you for your registration! This site requires manual approval of new accounts. Until your account has been approved, you will not have access to features that require membership."
msgid "awaiting_approval.info.2.qr_enabled"
-msgstr ""
+msgstr "Administrators can approve your account. Please show them this QR code, or send them the link below, to assist them in identifying and approving your account on FreeField. Administrators can also look up your account by your username."
msgid "awaiting_approval.info.2.qr_disabled"
-msgstr ""
+msgstr "Administrators can approve your account. Please send them the link below to assist them in identifying and approving your account on FreeField. Administrators can also look up your account by your username."
msgid "awaiting_approval.using.qr.head"
-msgstr ""
+msgstr "Approval QR code"
msgid "awaiting_approval.using.link.head"
-msgstr ""
+msgstr "Enlace de aprobación"
msgid "awaiting_approval.using.link.info"
-msgstr ""
+msgstr "Administrators can use this URL to approve your account."
msgid "awaiting_approval.return_button"
-msgstr ""
+msgstr "Volver a la página principal"
diff --git a/includes/i18n/es-ES/category.po b/includes/i18n/es-ES/category.po
index 02e36b6e..5c1d6903 100644
--- a/includes/i18n/es-ES/category.po
+++ b/includes/i18n/es-ES/category.po
@@ -13,72 +13,72 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/category.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-10-08 20:55\n"
# Label for objectives which are currently in-game (e.g. monthly, event, etc.)
msgid "category.objective.current"
-msgstr ""
+msgstr "Objetivos actuales"
msgid "category.objective.battle"
-msgstr ""
+msgstr "Objetivos de batalla"
msgid "category.objective.raid"
-msgstr ""
+msgstr "Objetivos de incursiones"
msgid "category.objective.catch"
-msgstr ""
+msgstr "Objetivos de captura"
msgid "category.objective.item"
-msgstr ""
+msgstr "Objetivos de objetos"
msgid "category.objective.buddy"
-msgstr ""
+msgstr "Buddy objectives"
msgid "category.objective.hatch"
-msgstr ""
+msgstr "Objetivos de Huevo"
msgid "category.objective.evolve"
-msgstr ""
+msgstr "Objetivos de evolución"
msgid "category.objective.power_up"
-msgstr ""
+msgstr "Objetivos de potenciación"
msgid "category.objective.transfer"
-msgstr ""
+msgstr "Objetivos de transferencia"
msgid "category.objective.throwing_skill"
-msgstr ""
+msgstr "Objetivos de habilidad de lanzamiento"
msgid "category.objective.explore"
-msgstr ""
+msgstr "Objetivos de exploración"
msgid "category.objective.social"
-msgstr ""
+msgstr "Objetivos sociales"
msgid "category.reward.ball"
-msgstr ""
+msgstr "Ball rewards"
msgid "category.reward.berry"
-msgstr ""
+msgstr "Recompensas de bayas"
msgid "category.reward.potion"
-msgstr ""
+msgstr "Potion rewards"
msgid "category.reward.revive"
-msgstr ""
+msgstr "Revive rewards"
msgid "category.reward.evolution_item"
-msgstr ""
+msgstr "Recompensas de objetos de evolución"
msgid "category.reward.tm"
-msgstr ""
+msgstr "Recompensas TM"
msgid "category.reward.stardust"
-msgstr ""
+msgstr "Recompensas de polvo estelar"
msgid "category.reward.candy"
-msgstr ""
+msgstr "Recompensas de caramelos"
msgid "category.reward.encounter"
-msgstr ""
+msgstr "Encounter rewards"
diff --git a/includes/i18n/es-ES/clustering.po b/includes/i18n/es-ES/clustering.po
index ea572360..3a78bbb9 100644
--- a/includes/i18n/es-ES/clustering.po
+++ b/includes/i18n/es-ES/clustering.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/clustering.po\n"
-"PO-Revision-Date: 2019-05-31 01:48\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
# %1 = Number of POIs hidden from map
# %2 = Total number of POIs that are supposed to be visible in the map view
diff --git a/includes/i18n/es-ES/generation.po b/includes/i18n/es-ES/generation.po
index 3cc49dea..d394d1a0 100644
--- a/includes/i18n/es-ES/generation.po
+++ b/includes/i18n/es-ES/generation.po
@@ -13,17 +13,17 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/generation.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "generation.1.label"
-msgstr ""
+msgstr "Generación I"
msgid "generation.2.label"
-msgstr ""
+msgstr "Generación II"
msgid "generation.3.label"
-msgstr ""
+msgstr "Generación III"
msgid "generation.4.label"
-msgstr ""
+msgstr "Generación IV"
diff --git a/includes/i18n/es-ES/geo.po b/includes/i18n/es-ES/geo.po
index 7f6b7234..d21e7084 100644
--- a/includes/i18n/es-ES/geo.po
+++ b/includes/i18n/es-ES/geo.po
@@ -13,28 +13,28 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/geo.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
# This string determines how coordinate strings are displayed (consider the
# order of the coordinates, whether there should be a comma, etc.)
# %1 = Latitude, %2 = Longitude
# E.g. %1 = "40.1234°N", %2 = "10.4321°E"
msgid "geo.location.string"
-msgstr ""
+msgstr "{%1}, {%2}"
# %1 = Degrees
msgid "geo.direction.deg_north"
-msgstr ""
+msgstr "{%1}°N"
# %1 = Degrees
msgid "geo.direction.deg_south"
-msgstr ""
+msgstr "{%1}°S"
# %1 = Degrees
msgid "geo.direction.deg_east"
-msgstr ""
+msgstr "{%1}°E"
# %1 = Degrees
msgid "geo.direction.deg_west"
-msgstr ""
+msgstr "{%1}°W"
diff --git a/includes/i18n/es-ES/group.po b/includes/i18n/es-ES/group.po
index 0cf4ef07..50cea8c6 100644
--- a/includes/i18n/es-ES/group.po
+++ b/includes/i18n/es-ES/group.po
@@ -4,16 +4,15 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: freefield\n"
-"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Last-Translator: bilde2910 \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"X-Crowdin-SourceKey: msgstr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: crowdin.com\n"
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/group.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2020-01-20 10:38\n"
msgid "group.selector.current"
msgstr "Grupo actual"
@@ -25,16 +24,16 @@ msgid "group.level.unknown"
msgstr "Grupo desconocido"
msgid "group.level.anonymous"
-msgstr ""
+msgstr "Anonymous visitor"
msgid "group.level.read_only"
-msgstr ""
+msgstr "Miembro Limitado"
msgid "group.level.registered"
-msgstr "Usuarios registrados"
+msgstr "Miembro Registrado"
msgid "group.level.submitter"
-msgstr ""
+msgstr "Editor de Poképaradas"
msgid "group.level.moderator"
msgstr "Moderador"
@@ -43,5 +42,5 @@ msgid "group.level.admin"
msgstr "Administrador"
msgid "group.level.host"
-msgstr ""
+msgstr "Arceus"
diff --git a/includes/i18n/es-ES/install.po b/includes/i18n/es-ES/install.po
index 2727b7dd..aec9ab9d 100644
--- a/includes/i18n/es-ES/install.po
+++ b/includes/i18n/es-ES/install.po
@@ -13,10 +13,10 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/install.po\n"
-"PO-Revision-Date: 2019-04-30 22:50\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "install.button.continue"
-msgstr ""
+msgstr "Continuar configuración"
msgid "install.button.finish"
msgstr "Finalizar configuración"
@@ -25,13 +25,13 @@ msgid "install.button.retry"
msgstr "Vuelve a intentarlo"
msgid "install.operation.done"
-msgstr ""
+msgstr "Los resultados de la operación se enumeran a continuación."
msgid "install.stage.1.title"
-msgstr ""
+msgstr "Paso 1: Verificación de entorno"
msgid "install.stage.1.info"
-msgstr ""
+msgstr "¡Bienvenido a FreeField! Este asistente le guiará a través de la instalación de FreeField en su servidor. A continuación se muestran algunas comprobaciones preliminares del entorno del sistema."
msgid "install.stage.1.assert.https"
msgstr "Conexión cifrada (HTTPS) - necesaria para la geolocalización y la aplicación web progresiva"
@@ -40,7 +40,7 @@ msgid "install.stage.1.assert.root_writable"
msgstr "Directorio de instalación con permisos de escritura - requerido para instalar actualizaciones"
msgid "install.stage.1.assert.userdata_writable"
-msgstr ""
+msgstr "Userdata directory writable - required for core functionality"
msgid "install.stage.1.assert.curl_available"
msgstr "Extensión cURL cargada - requerida para autenticación y actualizaciones"
@@ -55,7 +55,7 @@ msgid "install.stage.1.assert.phar_available"
msgstr "PharData disponible - requerido para actualizaciones del software"
msgid "install.stage.1.checks"
-msgstr ""
+msgstr "Please ensure that all the above checks are passing (green checkmark). FreeField will work even if some entries fail with a yellow exclamation mark, though some features will be unavailable. FreeField will not work if any of the above checks fail with a red X. If you wish to fix any failing checks above, please do the relevant changes to your server configuration now, then refresh the page before proceeding."
msgid "install.stage.1.next"
msgstr "Cuando haya aplicado los cambios deseados, haga clic en el botón de abajo para continuar al siguiente paso, y el sistema pueda generar el archivo de configuración."
@@ -79,10 +79,10 @@ msgid "install.stage.3.title"
msgstr "Paso 3: Configuración de base de datos"
msgid "install.stage.3.info"
-msgstr ""
+msgstr "Please fill in the following database backend details."
msgid "install.stage.3.assert.valid_data"
-msgstr ""
+msgstr "Database details are valid"
msgid "install.stage.3.assert.config_written"
msgstr "Archivo de configuración actualizado"
@@ -103,7 +103,7 @@ msgid "install.stage.4.title"
msgstr "Paso 4: Configuración de autenticación"
msgid "install.stage.4.info"
-msgstr ""
+msgstr "Please choose one or more authentiation providers from the list below, and configure it to enable signing in with the given authentication provider. Please refer to the documentation for more information on how to properly configure each authentication provider."
msgid "install.stage.4.assert.valid_data"
msgstr "Los datos de autenticación proporcionados son válidos"
@@ -115,54 +115,54 @@ msgid "install.stage.4.assert.any_enabled"
msgstr "Al menos un proveedor de autenticación está habilitado"
msgid "install.stage.4.assert.proceed_stage"
-msgstr ""
+msgstr "Prepared authentication challenge"
msgid "install.stage.4.next"
msgstr "Al continuar, se le pedirá que inicie sesión usando uno de los proveedores de autenticación que haya configurado."
msgid "install.stage.5.title"
-msgstr ""
+msgstr "Paso 5: Configuración de autenticación"
msgid "install.stage.5.assert.auth_success"
-msgstr ""
+msgstr "¡Autenticación correcta!"
msgid "install.stage.5.assert.user_created"
-msgstr ""
+msgstr "Cuenta registrada como administrador del sitio en la base de datos"
msgid "install.stage.5.assert.config_written"
-msgstr ""
+msgstr "Archivo de configuración actualizado"
msgid "install.stage.5.next"
-msgstr ""
+msgstr "Please click the button below to continue to map setup."
msgid "install.stage.6.title"
-msgstr ""
+msgstr "Paso 6: Configurar mapa"
msgid "install.stage.6.provider_info"
-msgstr ""
+msgstr "Please choose an available map provider from the following list of map providers."
msgid "install.stage.6.disclaimer"
-msgstr ""
+msgstr "Warning! Most map providers require you to agree to their Terms of Service and/or some other legal contract when you register for their services. You have the full responsibility to ensure that you meet the requirements set forth by your chosen map provider, and that your usage of their services through FreeField is in line with their policies and your license to use their services."
msgid "install.stage.6.field_guide"
-msgstr ""
+msgstr "Please enter the access token and/or other required parameters for your selected map provider below. You only have to fill the fields relevant to the map provider you chose above - all others can be left blank."
msgid "install.stage.6.default_info"
-msgstr ""
+msgstr "Please configure the default map center point for your FreeField installation. The map center point is the location the map is centered on by default, and should be central coordinate location in the city/area you are covering with FreeField. E.g. if you are setting your FreeField instance up for covering New York City, then enter a coordinate pair for a centrally located point in New York City."
msgid "install.stage.6.assert.valid_data"
-msgstr ""
+msgstr "Provided map settings are valid"
msgid "install.stage.6.assert.config_written"
-msgstr ""
+msgstr "Configuration file updated"
msgid "install.stage.6.next"
-msgstr ""
+msgstr "Congratulations! You have finished setting up FreeField. You may now proceed to, and use, your FreeField instance. When you click the button below, you will be redirected to the administration interface. Please finish setting up FreeField there, and customize the software to your liking."
msgid "install.stage.6.post_install.head"
-msgstr ""
+msgstr "¡Alerta!"
# %1 = , %2 =
msgid "install.stage.6.post_install.body"
-msgstr ""
+msgstr "There are still a few things you should configure before you grant others access to FreeField. Please carefully review the {%1}post-installation steps{%2} in the documentation before you proceed."
diff --git a/includes/i18n/es-ES/language.po b/includes/i18n/es-ES/language.po
index 697b0894..2e6afbbf 100644
--- a/includes/i18n/es-ES/language.po
+++ b/includes/i18n/es-ES/language.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/language.po\n"
-"PO-Revision-Date: 2019-06-04 13:22\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# The name of the language and country in English (e.g. "French (France)", "Spanish (Spain)")
msgid "language.name_english"
diff --git a/includes/i18n/es-ES/login.po b/includes/i18n/es-ES/login.po
index 383f3692..a8591e48 100644
--- a/includes/i18n/es-ES/login.po
+++ b/includes/i18n/es-ES/login.po
@@ -13,24 +13,24 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "login.title"
-msgstr ""
+msgstr "Iniciar sesión en FreeField"
msgid "login.desc"
-msgstr ""
+msgstr "Por favor, seleccione un proveedor de autenticación a continuación"
# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
msgid "login.perform"
-msgstr ""
+msgstr "Iniciar sesión usando {%1}"
msgid "login.reconfigure"
-msgstr ""
+msgstr "Reconfigurar"
msgid "login.telegram.title"
-msgstr ""
+msgstr "Autenticar con Telegram"
msgid "login.telegram.body"
-msgstr ""
+msgstr "Por favor, haga clic en el botón de abajo para iniciar sesión usando Telegram"
diff --git a/includes/i18n/es-ES/login_failed.po b/includes/i18n/es-ES/login_failed.po
index 1a674d60..627597ca 100644
--- a/includes/i18n/es-ES/login_failed.po
+++ b/includes/i18n/es-ES/login_failed.po
@@ -13,18 +13,18 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login_failed.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "login_failed.title"
-msgstr ""
+msgstr "Error al iniciar sesión"
msgid "login_failed.default_auth_provider"
-msgstr ""
+msgstr "su proveedor de autenticación"
# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
msgid "login_failed.desc"
-msgstr ""
+msgstr "No se pudo autenticar con {%1}"
msgid "login_failed.info"
-msgstr ""
+msgstr "Error al intentar autenticación con {%1}. ¿Desea intentarlo de nuevo?"
diff --git a/includes/i18n/es-ES/mobile.po b/includes/i18n/es-ES/mobile.po
index 0386c743..f50ca990 100644
--- a/includes/i18n/es-ES/mobile.po
+++ b/includes/i18n/es-ES/mobile.po
@@ -13,8 +13,8 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/mobile.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "mobile.pwa.connecting"
-msgstr ""
+msgstr "Conectando"
diff --git a/includes/i18n/es-ES/motd.po b/includes/i18n/es-ES/motd.po
index 455f8dc3..53710c6e 100644
--- a/includes/i18n/es-ES/motd.po
+++ b/includes/i18n/es-ES/motd.po
@@ -13,14 +13,14 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/motd.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "motd.title"
-msgstr ""
+msgstr "Mensaje del día"
msgid "motd.hide"
-msgstr ""
+msgstr "No mostrar este mensaje de nuevo"
msgid "motd.close"
-msgstr ""
+msgstr "Cerrar"
diff --git a/includes/i18n/es-ES/multi.po b/includes/i18n/es-ES/multi.po
index 94786368..a729d51f 100644
--- a/includes/i18n/es-ES/multi.po
+++ b/includes/i18n/es-ES/multi.po
@@ -13,35 +13,35 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/multi.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 20:55\n"
# This string is a string displayed for type tasks. E.g. "Water-type" in "Catch
# 3 Water-type Pokémon."
# %1 = Type of catch ("Ice", "Water", etc.)
msgid "multi.type.single"
-msgstr ""
+msgstr "Tipo {%1}"
# This string is a string displayed for type tasks. E.g. "Water, Fire or
# Grass-type" in "Catch 3 Water, Fire or Grass-type Pokémon."
# %1 and %2 = Type of catch ("Ice", "Water", etc.)
msgid "multi.type.double"
-msgstr ""
+msgstr "Tipo {%1} o {%2}"
# This string is a string displayed for type tasks. E.g. "Water or Grass-type"
# in "Catch 3 Water or Grass-type Pokémon."
# %1 through %3 = Type of catch ("Ice", "Water", etc.)
msgid "multi.type.triple"
-msgstr ""
+msgstr "Tipos {%1}, {%2} o {%3}"
# This string is a string used to display and concatenate multiple species.
# E.g. "Bulbasaur or Squirtle" in "Catch a Bulbasaur or Squirtle."
# %1 through %3 = Name of a species ("Pikachu", "Charizard", etc.)
msgid "multi.species.double"
-msgstr ""
+msgstr "{%1} o {%2}"
# This string is a string used to display and concatenate multiple species.
# E.g. "Bulbasaur, Charmander or Squirtle" in "Catch a Bulbasaur, Charmander or
# Squirtle."
msgid "multi.species.triple"
-msgstr ""
+msgstr "{%1}, {%2} o {%3}"
diff --git a/includes/i18n/es-ES/objective.po b/includes/i18n/es-ES/objective.po
index 05ffb9ec..1787daf3 100644
--- a/includes/i18n/es-ES/objective.po
+++ b/includes/i18n/es-ES/objective.po
@@ -13,311 +13,311 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/objective.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:25\n"
msgid "objective.battle_gym.singular"
-msgstr ""
+msgstr "Battle in a Gym"
# %1 = Number of battles
msgid "objective.battle_gym.plural"
-msgstr ""
+msgstr "Battle in a Gym {%1} times"
msgid "objective.win_gym.singular"
-msgstr ""
+msgstr "Win a Gym battle"
# %1 = Number of battles
msgid "objective.win_gym.plural"
-msgstr ""
+msgstr "Win {%1} Gym battles"
msgid "objective.battle_raid.singular"
-msgstr ""
+msgstr "Participa en una incursión"
# %1 = Number of raids
msgid "objective.battle_raid.plural"
-msgstr ""
+msgstr "Participa en una incursión {%1} veces"
msgid "objective.win_raid.singular"
-msgstr ""
+msgstr "Gana una incursión"
# %1 = Number of raids
msgid "objective.win_raid.plural"
-msgstr ""
+msgstr "Gana {%1} incursiones"
# %1 = Raid tier
msgid "objective.level_raid.singular"
-msgstr ""
+msgstr "Gana en una incursión de nivel {%1} o superior"
# %1 = Raid tier, %2 = Number of raids
msgid "objective.level_raid.plural"
-msgstr ""
+msgstr "Win {%2} level {%1} or higher raids"
msgid "objective.se_charge.singular"
-msgstr ""
+msgstr "Use a Super Effective Charged attack in a Gym battle"
# %1 = Number of battles
msgid "objective.se_charge.plural"
-msgstr ""
+msgstr "Use a Super Effective Charged attack in {%1} Gym battles"
msgid "objective.catch.singular"
-msgstr ""
+msgstr "Catch a Pokémon"
# %1 = Number of catches
msgid "objective.catch.plural"
-msgstr ""
+msgstr "Catch {%1} Pokémon"
msgid "objective.catch_weather.singular"
-msgstr ""
+msgstr "Catch a Pokémon with Weather Boost"
# %1 = Number of catches
msgid "objective.catch_weather.plural"
-msgstr ""
+msgstr "Catch {%1} Pokémon with Weather Boost"
# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.)
msgid "objective.catch_type.singular"
-msgstr ""
+msgstr "Catch a {%1} Pokémon"
# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.),
# %2 = Number of catches
msgid "objective.catch_type.plural"
-msgstr ""
+msgstr "Catch {%2} {%1} Pokémon"
# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
# etc.)
msgid "objective.catch_specific.singular"
-msgstr ""
+msgstr "Catch a {%1}"
# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
# etc.), %2 = Number of catches
msgid "objective.catch_specific.plural"
-msgstr ""
+msgstr "Catch {%2} {%1}"
msgid "objective.catch_daily.singular"
-msgstr ""
+msgstr "Catch a Pokémon 1 day in a row"
# %1 = Number of days in a row
msgid "objective.catch_daily.plural"
-msgstr ""
+msgstr "Catch a Pokémon {%1} days in a row"
msgid "objective.use_berry.singular"
-msgstr ""
+msgstr "Use a Berry to help catch Pokémon"
# %1 = Number of berries
msgid "objective.use_berry.plural"
-msgstr ""
+msgstr "Use {%1} Berries to help catch Pokémon"
# %1 = Item to use (e.g. "Pinap Berry")
msgid "objective.use_item_encounter.singular"
-msgstr ""
+msgstr "Use a {%1} to help catch Pokémon"
# %1 = Item to use (e.g. "Pinap Berry")
# %2 = Number of items
msgid "objective.use_item_encounter.plural"
-msgstr ""
+msgstr "Use {%2} {%1} to help catch Pokémon"
msgid "objective.buddy_candy.singular"
-msgstr ""
+msgstr "Earn a Candy walking with your buddy"
# %1 = Number of candies
msgid "objective.buddy_candy.plural"
-msgstr ""
+msgstr "Earn {%1} Candies walking with your buddy"
msgid "objective.hatch.singular"
-msgstr ""
+msgstr "Hatch an Egg"
# %1 = Number of eggs
msgid "objective.hatch.plural"
-msgstr ""
+msgstr "Hatch {%1} Eggs"
msgid "objective.evolve.singular"
-msgstr ""
+msgstr "Evolve a Pokémon"
# %1 = Number of evolves
msgid "objective.evolve.plural"
-msgstr ""
+msgstr "Evolve {%1} Pokémon"
# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
msgid "objective.evolve_type.singular"
-msgstr ""
+msgstr "Evolve a {%1} Pokémon"
# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
# %2 = Number of evolves
msgid "objective.evolve_type.plural"
-msgstr ""
+msgstr "Evolve {%2} {%1} Pokémon"
# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
msgid "objective.evolve_evolution.singular"
-msgstr ""
+msgstr "Evolve an evolved {%1} Pokémon"
# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
# %2 = Number of evolves
msgid "objective.evolve_evolution.plural"
-msgstr ""
+msgstr "Evolve {%2} evolved {%1} Pokémon"
# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
# etc.)
msgid "objective.evolve_specific.singular"
-msgstr ""
+msgstr "Evolve a {%1}"
# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
# etc.), %2 = Number of evolves
msgid "objective.evolve_specific.plural"
-msgstr ""
+msgstr "Evolve {%2} {%1}"
msgid "objective.evolve_item.singular"
-msgstr ""
+msgstr "Use an item to evolve a Pokémon"
# %1 = Number of evolves
msgid "objective.evolve_item.plural"
-msgstr ""
+msgstr "Use items to evolve Pokémon {%1} times"
msgid "objective.power_up.singular"
-msgstr ""
+msgstr "Power up a Pokémon"
# %1 = Number of power-ups
msgid "objective.power_up.plural"
-msgstr ""
+msgstr "Power up a Pokémon {%1} times"
msgid "objective.transfer.singular"
-msgstr ""
+msgstr "Transfer a Pokémon"
# %1 = Number of transfers
msgid "objective.transfer.plural"
-msgstr ""
+msgstr "Transfer {%1} Pokémon"
msgid "objective.throw_simple_nice.singular"
-msgstr ""
+msgstr "Make a Nice Throw"
# %1 = Number of throws
msgid "objective.throw_simple_nice.plural"
-msgstr ""
+msgstr "Make {%1} Nice Throws"
msgid "objective.throw_simple_nice_chain.singular"
-msgstr ""
+msgstr "Make 1 Nice Throw in a row"
# %1 = Number of throws
msgid "objective.throw_simple_nice_chain.plural"
-msgstr ""
+msgstr "Make {%1} Nice Throws in a row"
msgid "objective.throw_simple_great.singular"
-msgstr ""
+msgstr "Make a Great Throw"
# %1 = Number of throws
msgid "objective.throw_simple_great.plural"
-msgstr ""
+msgstr "Make {%1} Great Throws"
msgid "objective.throw_simple_great_chain.singular"
-msgstr ""
+msgstr "Make 1 Great Throw in a row"
# %1 = Number of throws
msgid "objective.throw_simple_great_chain.plural"
-msgstr ""
+msgstr "Make {%1} Great Throws in a row"
msgid "objective.throw_simple_excellent.singular"
-msgstr ""
+msgstr "Make an Excellent Throw"
# %1 = Number of throws
msgid "objective.throw_simple_excellent.plural"
-msgstr ""
+msgstr "Make {%1} Excellent Throws"
msgid "objective.throw_simple_excellent_chain.singular"
-msgstr ""
+msgstr "Make 1 Excellent Throw in a row"
# %1 = Number of throws
msgid "objective.throw_simple_excellent_chain.plural"
-msgstr ""
+msgstr "Make {%1} Excellent Throws in a row"
msgid "objective.throw_curve.singular"
-msgstr ""
+msgstr "Make a Curveball Throw"
# %1 = Number of throws
msgid "objective.throw_curve.plural"
-msgstr ""
+msgstr "Make {%1} Curveball Throws"
msgid "objective.throw_curve_chain.singular"
-msgstr ""
+msgstr "Make 1 Curveball Throw in a row"
# %1 = Number of throws
msgid "objective.throw_curve_chain.plural"
-msgstr ""
+msgstr "Make {%1} Curveball Throws in a row"
msgid "objective.throw_curve_nice.singular"
-msgstr ""
+msgstr "Make a Nice Curveball Throw"
# %1 = Number of throws
msgid "objective.throw_curve_nice.plural"
-msgstr ""
+msgstr "Make {%1} Nice Curveball Throws"
msgid "objective.throw_curve_nice_chain.singular"
-msgstr ""
+msgstr "Make 1 Nice Curveball Throw in a row"
# %1 = Number of throws
msgid "objective.throw_curve_nice_chain.plural"
-msgstr ""
+msgstr "Make {%1} Nice Curveball Throws in a row"
msgid "objective.throw_curve_great.singular"
-msgstr ""
+msgstr "Make a Great Curveball Throw"
# %1 = Number of throws
msgid "objective.throw_curve_great.plural"
-msgstr ""
+msgstr "Make {%1} Great Curveball Throws"
msgid "objective.throw_curve_great_chain.singular"
-msgstr ""
+msgstr "Make 1 Great Curveball Throw in a row"
# %1 = Number of throws
msgid "objective.throw_curve_great_chain.plural"
-msgstr ""
+msgstr "Make {%1} Great Curveball Throws in a row"
msgid "objective.throw_curve_excellent.singular"
-msgstr ""
+msgstr "Make an Excellent Curveball Throw"
# %1 = Number of throws
msgid "objective.throw_curve_excellent.plural"
-msgstr ""
+msgstr "Make {%1} Excellent Curveball Throws"
msgid "objective.throw_curve_excellent_chain.singular"
-msgstr ""
+msgstr "Make 1 Excellent Curveball Throw in a row"
# %1 = Number of throws
msgid "objective.throw_curve_excellent_chain.plural"
-msgstr ""
+msgstr "Make {%1} Excellent Curveball Throws in a row"
msgid "objective.visit_poi.singular"
-msgstr ""
+msgstr "Spin a Pokéstop or Gym"
# %1 = Number of POIs
msgid "objective.visit_poi.plural"
-msgstr ""
+msgstr "Spin {%1} Pokéstops or Gyms"
msgid "objective.new_poi.singular"
-msgstr ""
+msgstr "Spin a Pokéstop you haven't visited before"
# %1 = Number of POIs
msgid "objective.new_poi.plural"
-msgstr ""
+msgstr "Spin {%1} Pokéstops you haven't visited before"
msgid "objective.visit_daily.singular"
-msgstr ""
+msgstr "Visit Pokéstops 1 day in a row"
# %1 = Number of days in a row
msgid "objective.visit_daily.plural"
-msgstr ""
+msgstr "Visit Pokéstops {%1} days in a row"
msgid "objective.send_gift.singular"
-msgstr ""
+msgstr "Send a Gift to a friend"
# %1 = Number of gifts to send
msgid "objective.send_gift.plural"
-msgstr ""
+msgstr "Send {%1} Gifts to friends"
msgid "objective.trade.singular"
-msgstr ""
+msgstr "Trade a Pokémon"
# %1 = Number of specimen to trade
msgid "objective.trade.plural"
-msgstr ""
+msgstr "Trade {%1} Pokémon"
# Displayed when the research task objective of a Pokéstop is unknown.
msgid "objective.unknown.singular"
-msgstr ""
+msgstr "Unknown objective"
diff --git a/includes/i18n/es-ES/page_title.po b/includes/i18n/es-ES/page_title.po
index 1632b419..bb6c9ef2 100644
--- a/includes/i18n/es-ES/page_title.po
+++ b/includes/i18n/es-ES/page_title.po
@@ -13,41 +13,41 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/page_title.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "page_title.setup"
-msgstr ""
+msgstr "Configuración de FreeField"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
# %2 = Administration domain (e.g. "Users", "Webhooks")
msgid "page_title.admin"
-msgstr ""
+msgstr "Admin » {%2} | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.main"
-msgstr ""
+msgstr "{%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.access_denied"
-msgstr ""
+msgstr "Acceso denegado | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.login.main"
-msgstr ""
+msgstr "Inicio de sesión | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.login.failed"
-msgstr ""
+msgstr "Error al iniciar sesión | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.login.awaiting_approval"
-msgstr ""
+msgstr "Cuenta pendiente de aprobación | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.login.approve_user"
-msgstr ""
+msgstr "Solicitud de aprobación de usuario | {%1}"
# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
msgid "page_title.login.telegram"
-msgstr ""
+msgstr "Inicio de sesión » Telegram | {%1}"
diff --git a/includes/i18n/es-ES/parameter.po b/includes/i18n/es-ES/parameter.po
index fc829532..73b1ac03 100644
--- a/includes/i18n/es-ES/parameter.po
+++ b/includes/i18n/es-ES/parameter.po
@@ -13,21 +13,21 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/parameter.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
# objective or reward. This label will display when an objective or reward that
# requires it has been chosen. This label is for the minimum level of a raid.
msgid "parameter.min_tier.label"
-msgstr ""
+msgstr "Minimum level"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog as placeholders in e.g. the following string:
# "Win a level [placeholder] or higher raid"
# Please remember to include square brackets around the placeholder.
msgid "parameter.min_tier.placeholder"
-msgstr ""
+msgstr "[x]"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
@@ -35,14 +35,14 @@ msgstr ""
# requires it has been chosen. This label is for the minimum objective or
# reward quantity (e.g. minimum number of Pokémon to catch).
msgid "parameter.quantity.label"
-msgstr ""
+msgstr "Cantidad"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog as placeholders in e.g. the following string:
# "Catch [placeholder] Pokémon"
# Please remember to include square brackets around the placeholder.
msgid "parameter.quantity.placeholder"
-msgstr ""
+msgstr "[n]"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
@@ -50,19 +50,19 @@ msgstr ""
# requires it has been chosen. This label is for the catch/evolve/etc. species
# requirements.
msgid "parameter.species.label"
-msgstr ""
+msgstr "Pokémons"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog as placeholders in e.g. the following string:
# "Catch a [placeholder]"
# Please remember to include square brackets around the placeholder.
msgid "parameter.species.placeholder"
-msgstr ""
+msgstr "[Species]"
# This is a header displayed in a selection box when selecting a particular
# species for a research objective. It lists commonly reported species.
msgid "parameter.species.recent.label"
-msgstr ""
+msgstr "Recent species"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
@@ -70,14 +70,14 @@ msgstr ""
# requires it has been chosen. This label is for the catch/evolve/etc. type
# requirements.
msgid "parameter.type.label"
-msgstr ""
+msgstr "Tipo(s)"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog as placeholders in e.g. the following string:
# "Catch a [placeholder] Pokémon"
# Please remember to include square brackets around the placeholder.
msgid "parameter.type.placeholder"
-msgstr ""
+msgstr "Tipo [Type]"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
@@ -85,12 +85,12 @@ msgstr ""
# requires it has been chosen. This label is for the item usage requirements
# for encounters.
msgid "parameter.encounter_item.label"
-msgstr ""
+msgstr "Objeto"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog as placeholders in e.g. the following string:
# "Use a [placeholder] to help catch Pokémon"
# Please remember to include square brackets around the placeholder.
msgid "parameter.encounter_item.placeholder"
-msgstr ""
+msgstr "[Item]"
diff --git a/includes/i18n/es-ES/poi.po b/includes/i18n/es-ES/poi.po
index 96b3eba1..42486b0b 100644
--- a/includes/i18n/es-ES/poi.po
+++ b/includes/i18n/es-ES/poi.po
@@ -4,196 +4,195 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Project-Id-Version: freefield\n"
-"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Last-Translator: bilde2910 \n"
"Language-Team: Spanish\n"
"Language: es_ES\n"
"X-Crowdin-SourceKey: msgstr\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: crowdin.com\n"
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/poi.po\n"
-"PO-Revision-Date: 2019-05-31 01:48\n"
+"PO-Revision-Date: 2020-01-22 03:04\n"
# %1 = Last updated date/time
msgid "poi.last.time"
-msgstr ""
+msgstr "Actualizado {%1}"
# %1 = Nickname of last user to update POI
msgid "poi.last.user"
-msgstr ""
+msgstr "Actualizado por {%1}"
msgid "poi.add.title"
-msgstr ""
+msgstr "Añadir"
msgid "poi.add.name"
-msgstr ""
+msgstr "Nombre"
msgid "poi.add.latitude"
-msgstr ""
+msgstr "Latitud"
msgid "poi.add.longitude"
-msgstr ""
+msgstr "Longitud"
msgid "poi.add.submit"
-msgstr ""
+msgstr "Añadir Poképarada"
msgid "poi.add.processing"
-msgstr ""
+msgstr "Añadiendo Poképarada..."
# %1 = Name of POI
msgid "poi.add.success"
-msgstr ""
+msgstr "¡La Poképarada \"{%1}\", fue añadida correctamente!"
# %1 = Name of POI, %2 = Reason it failed
msgid "poi.add.failed.message"
-msgstr ""
+msgstr "Error al añadir Poképarada \"{%1}\": {%2}"
# %1 = , %2 =
msgid "poi.add.instructions"
-msgstr ""
+msgstr "Haz clic en el mapa para añadir una nueva Poképarada en esa ubicación ({%1}Cancelar{%2})"
msgid "poi.move.instructions"
-msgstr ""
+msgstr "Haz clic en el mapa para seleccionar una nueva ubicación para esta Poképarada ({%1}Cancelar{%2})"
msgid "poi.move.processing"
-msgstr ""
+msgstr "Moviendo Poképarada..."
msgid "poi.move.success"
-msgstr ""
+msgstr "¡Poképarada reubicada exitosamente!"
# %1 = Reason it failed
msgid "poi.move.failed.message"
-msgstr ""
+msgstr "Error al mover Poképarada: {%1}"
msgid "poi.rename.prompt"
-msgstr ""
+msgstr "Escribe un nuevo nombre para la Poképarada:"
msgid "poi.rename.processing"
-msgstr ""
+msgstr "Renombrando Poképarada..."
msgid "poi.rename.success"
-msgstr ""
+msgstr "¡Pokeparada renombrada con éxito!"
# %1 = Reason it failed
msgid "poi.rename.failed.message"
-msgstr ""
+msgstr "Error al renombrar Poképarada: {%1}"
msgid "poi.clear.confirm"
-msgstr ""
+msgstr "¿Estás seguro que quieres borrar la misión actual de esta Poképarada?"
msgid "poi.clear.processing"
-msgstr ""
+msgstr "Eliminando misión..."
msgid "poi.clear.success"
-msgstr ""
+msgstr "Se eliminó con éxito la misión en esta Poképarada!"
# %1 = Reason it failed
msgid "poi.clear.failed.message"
-msgstr ""
+msgstr "Error al borrar la misión: {%1}"
msgid "poi.delete.confirm"
-msgstr ""
+msgstr "¿Estás seguro que deseas eliminar esta Poképarada del mapa?"
msgid "poi.delete.processing"
-msgstr ""
+msgstr "Eliminando Poképarada..."
msgid "poi.delete.success"
-msgstr ""
+msgstr "¡La Poképarada fue eliminada exitosamente!"
# %1 = Reason it failed
msgid "poi.delete.failed.message"
-msgstr ""
+msgstr "Error al eliminar Poképarada: {%1}"
msgid "poi.update.title"
-msgstr ""
+msgstr "Reportar misión"
msgid "poi.update.name"
-msgstr ""
+msgstr "Nombre"
msgid "poi.update.objective"
-msgstr ""
+msgstr "Objetivo"
msgid "poi.update.reward"
-msgstr ""
+msgstr "Recompensa"
msgid "poi.update.submit"
-msgstr ""
+msgstr "Enviar"
msgid "poi.update.processing"
-msgstr ""
+msgstr "Enviando investigación..."
msgid "poi.update.success"
-msgstr ""
+msgstr "¡Investigación de campo enviada con éxito!"
# %1 = Reason it failed
msgid "poi.update.failed.message"
-msgstr ""
+msgstr "Error al enviar investigación de campo: {%1}"
msgid "poi.search.placeholder"
-msgstr ""
+msgstr "Buscar Pokeparadas..."
# %1 = Distance in kilometers
msgid "poi.search.distance"
-msgstr ""
+msgstr "{%1} km"
msgid "poi.filter.title"
-msgstr ""
+msgstr "Filtrar Pokeparadas"
msgid "poi.filter.mode.title"
-msgstr ""
+msgstr "Tipo de filtro:"
msgid "poi.filter.mode.only"
-msgstr ""
+msgstr "Mostrar sólo Pokeparadas que coincidan con el objetivo y recompensa especificados"
msgid "poi.filter.mode.except"
-msgstr ""
+msgstr "Mostrar todas las Pokeparadas excepto cualquier objetivo y recompensa especificadas"
msgid "poi.filter.mode.unknown"
-msgstr ""
+msgstr "Show Pokéstops without reported research only"
msgid "poi.filter.objective.title"
-msgstr ""
+msgstr "Objetivo:"
msgid "poi.filter.objective.any"
-msgstr ""
+msgstr "Cualquier objetivo"
msgid "poi.filter.reward.title"
-msgstr ""
+msgstr "Recompensa:"
msgid "poi.filter.reward.any"
-msgstr ""
+msgstr "Cualquier recompensa"
msgid "poi.filter.submit"
-msgstr ""
+msgstr "Aplicar filtro"
msgid "poi.filter.reset"
-msgstr ""
+msgstr "Restablecer filtros"
# %1 = Reason it failed
msgid "poi.list.failed.message"
-msgstr ""
+msgstr "Error al listar Pokeparadas: {%1}"
# %1 = Research objective (e.g. "Make 3 Great Throws")
# %2 = Research reward (e.g. "1 Max Revive")
msgid "poi.objective_text"
-msgstr ""
+msgstr "{%1} para {%2}"
msgid "poi.report_research"
-msgstr ""
+msgstr "Enviar investigación de campo"
msgid "poi.move"
-msgstr ""
+msgstr "Mover"
msgid "poi.rename"
-msgstr ""
+msgstr "Renombrar"
msgid "poi.clear"
-msgstr ""
+msgstr "Elmiminar investigación"
msgid "poi.delete"
-msgstr ""
+msgstr "Eliminar"
msgid "poi.directions"
-msgstr ""
+msgstr "Cómo llegar"
diff --git a/includes/i18n/es-ES/release_type.po b/includes/i18n/es-ES/release_type.po
index 65ba1edf..e73737de 100644
--- a/includes/i18n/es-ES/release_type.po
+++ b/includes/i18n/es-ES/release_type.po
@@ -13,35 +13,35 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/release_type.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 20:55\n"
msgid "release_type.stable.name"
-msgstr ""
+msgstr "Versión estable"
msgid "release_type.stable.desc"
-msgstr ""
+msgstr "Esta versión se considera generalmente estable para uso de producción."
msgid "release_type.rc.name"
-msgstr ""
+msgstr "Release candidate"
msgid "release_type.rc.desc"
-msgstr ""
+msgstr "This release is mostly considered stable. No more functionality will be added before stable release at this point. The release has incomplete documentation and may contain minor bugs."
msgid "release_type.beta.name"
-msgstr ""
+msgstr "Versión beta (inestable)"
msgid "release_type.beta.desc"
-msgstr ""
+msgstr "This release is considered unstable. Minor functionality may be added before it becomes a release candidate. The release likely contains bugs. Documentation is minimal or non-existent for new features."
msgid "release_type.alpha.name"
-msgstr ""
+msgstr "Versión Alpha (muy inestable)"
msgid "release_type.alpha.desc"
-msgstr ""
+msgstr "This release is considered very unstable. Major functionality may be added before stable release. The release very likely contains bugs, and may break your FreeField installation. There is no documentation on new features."
msgid "release_type.dev.name"
-msgstr ""
+msgstr "Bleeding edge (extremely unstable)"
msgid "release_type.dev.desc"
-msgstr ""
+msgstr "This release is considered extremely unstable and incomplete. Major functionality will likely be added before stable release. This release almost certainly contains bugs, and may break your FreeField installation beyond repair. Due to the instability associated with bleeding edge releases, these releases are rarely published."
diff --git a/includes/i18n/es-ES/reward.po b/includes/i18n/es-ES/reward.po
index 6eb1570a..758fe667 100644
--- a/includes/i18n/es-ES/reward.po
+++ b/includes/i18n/es-ES/reward.po
@@ -13,266 +13,266 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/reward.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 20:55\n"
msgid "reward.poke_ball.general"
-msgstr ""
+msgstr "Pokeball"
msgid "reward.poke_ball.singular"
-msgstr ""
+msgstr "1 Pokeball"
# %1 = Amount/quantity
msgid "reward.poke_ball.plural"
-msgstr ""
+msgstr "{%1} Pokeballs"
msgid "reward.great_ball.general"
-msgstr ""
+msgstr "SuperBall"
msgid "reward.great_ball.singular"
-msgstr ""
+msgstr "1 SuperBall"
# %1 = Amount/quantity
msgid "reward.great_ball.plural"
-msgstr ""
+msgstr "{%1} Superballs"
msgid "reward.ultra_ball.general"
-msgstr ""
+msgstr "Ultraball"
msgid "reward.ultra_ball.singular"
-msgstr ""
+msgstr "1 Ultraball"
# %1 = Amount/quantity
msgid "reward.ultra_ball.plural"
-msgstr ""
+msgstr "{%1} Ultraballs"
msgid "reward.razz_berry.general"
-msgstr ""
+msgstr "Baya Frambu"
msgid "reward.razz_berry.singular"
-msgstr ""
+msgstr "1 Baya Frambu"
# %1 = Amount/quantity
msgid "reward.razz_berry.plural"
-msgstr ""
+msgstr "{%1} Bayas Frambu"
msgid "reward.nanab_berry.general"
-msgstr ""
+msgstr "Baya Látano"
msgid "reward.nanab_berry.singular"
-msgstr ""
+msgstr "1 Baya Látano"
# %1 = Amount/quantity
msgid "reward.nanab_berry.plural"
-msgstr ""
+msgstr "{%1} Bayas Látano"
msgid "reward.pinap_berry.general"
-msgstr ""
+msgstr "Baya Pinia"
msgid "reward.pinap_berry.singular"
-msgstr ""
+msgstr "1 Baya Pinia"
# %1 = Amount/quantity
msgid "reward.pinap_berry.plural"
-msgstr ""
+msgstr "{%1} Bayas Pinia"
msgid "reward.golden_razz_berry.general"
-msgstr ""
+msgstr "Baya Frambu dorada"
msgid "reward.golden_razz_berry.singular"
-msgstr ""
+msgstr "1 Baya Frambu dorada"
# %1 = Amount/quantity
msgid "reward.golden_razz_berry.plural"
-msgstr ""
+msgstr "{%1} Bayas Frambu dorada"
msgid "reward.silver_pinap_berry.general"
-msgstr ""
+msgstr "Baya Pinia plateada"
msgid "reward.silver_pinap_berry.singular"
-msgstr ""
+msgstr "1 Baya Pinia plateada"
# %1 = Amount/quantity
msgid "reward.silver_pinap_berry.plural"
-msgstr ""
+msgstr "{%1} Baya Pinia plateada"
msgid "reward.potion.general"
-msgstr ""
+msgstr "Poción"
msgid "reward.potion.singular"
-msgstr ""
+msgstr "1 Poción"
# %1 = Amount/quantity
msgid "reward.potion.plural"
-msgstr ""
+msgstr "{%1} Pociones"
msgid "reward.super_potion.general"
-msgstr ""
+msgstr "Superpoción"
msgid "reward.super_potion.singular"
-msgstr ""
+msgstr "1 Superpoción"
# %1 = Amount/quantity
msgid "reward.super_potion.plural"
-msgstr ""
+msgstr "{%1} Superpociones"
msgid "reward.hyper_potion.general"
-msgstr ""
+msgstr "Hiperpoción"
msgid "reward.hyper_potion.singular"
-msgstr ""
+msgstr "1 Hiperpoción"
# %1 = Amount/quantity
msgid "reward.hyper_potion.plural"
-msgstr ""
+msgstr "{%1} Hiperpoción"
msgid "reward.max_potion.general"
-msgstr ""
+msgstr "Poción Máxima"
msgid "reward.max_potion.singular"
-msgstr ""
+msgstr "1 Poción Máxima"
# %1 = Amount/quantity
msgid "reward.max_potion.plural"
-msgstr ""
+msgstr "{%1} Pociones Máximas"
msgid "reward.revive.general"
-msgstr ""
+msgstr "Revivir"
msgid "reward.revive.singular"
-msgstr ""
+msgstr "1 Revivir"
# %1 = Amount/quantity
msgid "reward.revive.plural"
-msgstr ""
+msgstr "{%1} Revivires"
msgid "reward.max_revive.general"
-msgstr ""
+msgstr "Revivir Máximo"
msgid "reward.max_revive.singular"
-msgstr ""
+msgstr "1 Revivir Máximo"
# %1 = Amount/quantity
msgid "reward.max_revive.plural"
-msgstr ""
+msgstr "{%1} Revivires Máximos"
msgid "reward.sun_stone.general"
-msgstr ""
+msgstr "Piedra Solar"
msgid "reward.sun_stone.singular"
-msgstr ""
+msgstr "1 Piedra Solar"
# %1 = Amount/quantity
msgid "reward.sun_stone.plural"
-msgstr ""
+msgstr "{%1} Piedras Solares"
msgid "reward.kings_rock.general"
-msgstr ""
+msgstr "Roca del Rey"
msgid "reward.kings_rock.singular"
-msgstr ""
+msgstr "1 Roca del Rey"
# %1 = Amount/quantity
msgid "reward.kings_rock.plural"
-msgstr ""
+msgstr "{%1} Rocas del Rey"
msgid "reward.metal_coat.general"
-msgstr ""
+msgstr "Revestimiento Metálico"
msgid "reward.metal_coat.singular"
-msgstr ""
+msgstr "1 Revestimiento Metálico"
# %1 = Amount/quantity
msgid "reward.metal_coat.plural"
-msgstr ""
+msgstr "{%1} Revestimientos Metálicos"
msgid "reward.dragon_scale.general"
-msgstr ""
+msgstr "Escama Dragón"
msgid "reward.dragon_scale.singular"
-msgstr ""
+msgstr "1 Escama Dragón"
# %1 = Amount/quantity
msgid "reward.dragon_scale.plural"
-msgstr ""
+msgstr "{%1} Escamas Dragón"
msgid "reward.up_grade.general"
-msgstr ""
+msgstr "Up-Grade"
msgid "reward.up_grade.singular"
-msgstr ""
+msgstr "1 Up-Grade"
# %1 = Amount/quantity
msgid "reward.up_grade.plural"
-msgstr ""
+msgstr "{%1} Up-Grades"
msgid "reward.sinnoh_stone.general"
-msgstr ""
+msgstr "Piedra Sinnoh"
msgid "reward.sinnoh_stone.singular"
-msgstr ""
+msgstr "1 Piedra Sinnoh"
# %1 = Amount/quantity
msgid "reward.sinnoh_stone.plural"
-msgstr ""
+msgstr "{%1} Piedras Sinnoh"
msgid "reward.fast_tm.general"
-msgstr ""
+msgstr "MT de ataque rápido"
msgid "reward.fast_tm.singular"
-msgstr ""
+msgstr "1 MT de ataque rápido"
# %1 = Amount/quantity
msgid "reward.fast_tm.plural"
-msgstr ""
+msgstr "{%1} MTs de ataque rápido"
msgid "reward.charge_tm.general"
-msgstr ""
+msgstr "MT de ataque cargado"
msgid "reward.charge_tm.singular"
-msgstr ""
+msgstr "1 MT de ataque cargado"
# %1 = Amount/quantity
msgid "reward.charge_tm.plural"
-msgstr ""
+msgstr "{%1} MTs de ataque cargado"
msgid "reward.stardust.general"
-msgstr ""
+msgstr "Polvo estelar"
msgid "reward.stardust.singular"
-msgstr ""
+msgstr "1 Polvo estelar"
# %1 = Amount/quantity
msgid "reward.stardust.plural"
-msgstr ""
+msgstr "{%1} Polvos estelares"
msgid "reward.rare_candy.general"
-msgstr ""
+msgstr "Caramelo raro"
msgid "reward.rare_candy.singular"
-msgstr ""
+msgstr "1 Caramelo raro"
# %1 = Amount/quantity
msgid "reward.rare_candy.plural"
-msgstr ""
+msgstr "{%1} Caramelos raros"
msgid "reward.encounter.general"
-msgstr ""
+msgstr "Aparece un Pokémon"
msgid "reward.encounter.singular"
-msgstr ""
+msgstr "Aparece un Pokémon"
msgid "reward.encounter.plural"
-msgstr ""
+msgstr "Aparecen Pokémons"
# %1 = Name of a species ("Pikachu", "Charizard", etc.)
msgid "reward.encounter_specific.singular"
-msgstr ""
+msgstr "{%1} encuentro"
# %1 = Name of a species ("Pikachu", "Charizard", etc.)
msgid "reward.encounter_specific.plural"
-msgstr ""
+msgstr "{%1} encuentros"
# Displayed when the research task reward from a Pokéstop is unknown.
msgid "reward.unknown.singular"
-msgstr ""
+msgstr "recompensa desconocida"
diff --git a/includes/i18n/es-ES/setting.po b/includes/i18n/es-ES/setting.po
index b17748a3..4fbd4e9f 100644
--- a/includes/i18n/es-ES/setting.po
+++ b/includes/i18n/es-ES/setting.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/setting.po\n"
-"PO-Revision-Date: 2019-06-04 15:25\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "setting.site.uri.name"
msgstr ""
diff --git a/includes/i18n/es-ES/sidebar.po b/includes/i18n/es-ES/sidebar.po
index 629e16f3..1c846750 100644
--- a/includes/i18n/es-ES/sidebar.po
+++ b/includes/i18n/es-ES/sidebar.po
@@ -13,86 +13,86 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/sidebar.po\n"
-"PO-Revision-Date: 2019-06-04 13:30\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "sidebar.signed_in_as"
-msgstr ""
+msgstr "Identificado como"
msgid "sidebar.approval_pending"
-msgstr ""
+msgstr "Pendiente de aprobación"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.logout"
-msgstr ""
+msgstr "Cerrar sesión"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.login"
-msgstr ""
+msgstr "Iniciar sesión"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.show_motd"
-msgstr ""
+msgstr "Mostrar MotD"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.return"
-msgstr ""
+msgstr "Volver"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.add_poi"
-msgstr ""
+msgstr "Pokeparada"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.filters"
-msgstr ""
+msgstr "Filtrar"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.search"
-msgstr ""
+msgstr "Buscar"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.settings"
-msgstr ""
+msgstr "Ajustes"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.manage_site"
-msgstr ""
+msgstr "Administrar sitio"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.language.label"
-msgstr ""
+msgstr "Idioma:"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.language.auto"
-msgstr ""
+msgstr "Detectar automáticamente"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.language.device"
-msgstr ""
+msgstr "Idioma del dispositivo"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.language.select"
-msgstr ""
+msgstr "Idiomas Disponibles"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.reset"
-msgstr ""
+msgstr "Reestablecer"
# Please keep this string short - ensure that it does not exceeed the width of
# the sidebar!
msgid "sidebar.cancel"
-msgstr ""
+msgstr "Cancelar"
diff --git a/includes/i18n/es-ES/species.po b/includes/i18n/es-ES/species.po
index 6a0659a2..7bbc55cf 100644
--- a/includes/i18n/es-ES/species.po
+++ b/includes/i18n/es-ES/species.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/species.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# Note: These should only be translated if an official translation exists for
# these species in the language you are translating to. E.g. in German, the
diff --git a/includes/i18n/es-ES/theme.po b/includes/i18n/es-ES/theme.po
index 0856b9ee..2445ad9b 100644
--- a/includes/i18n/es-ES/theme.po
+++ b/includes/i18n/es-ES/theme.po
@@ -13,12 +13,12 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/theme.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
# This string is used to display the name and author of each installed icon set
# in the icon set drop-down selector. Example: "John's Amazing Map Markers (by
# John Doe)"
# %1 = Name of icon set, %2 = Author of icon set
msgid "theme.name_label"
-msgstr ""
+msgstr "{%1} (por {%2})"
diff --git a/includes/i18n/es-ES/type.po b/includes/i18n/es-ES/type.po
index 48c9e974..a91fe69f 100644
--- a/includes/i18n/es-ES/type.po
+++ b/includes/i18n/es-ES/type.po
@@ -13,59 +13,59 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/type.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "type.normal"
-msgstr ""
+msgstr "Normal"
msgid "type.fighting"
-msgstr ""
+msgstr "Lucha"
msgid "type.flying"
-msgstr ""
+msgstr "Volador"
msgid "type.poison"
-msgstr ""
+msgstr "Veneno"
msgid "type.ground"
-msgstr ""
+msgstr "Tierra"
msgid "type.rock"
-msgstr ""
+msgstr "Roca"
msgid "type.bug"
-msgstr ""
+msgstr "Bicho"
msgid "type.ghost"
-msgstr ""
+msgstr "Fantasma"
msgid "type.steel"
-msgstr ""
+msgstr "Acero"
msgid "type.fire"
-msgstr ""
+msgstr "Fuego"
msgid "type.water"
-msgstr ""
+msgstr "Agua"
msgid "type.grass"
-msgstr ""
+msgstr "Planta"
msgid "type.electric"
-msgstr ""
+msgstr "Eléctrico"
msgid "type.psychic"
-msgstr ""
+msgstr "Psíquico"
msgid "type.ice"
-msgstr ""
+msgstr "Hielo"
msgid "type.dragon"
-msgstr ""
+msgstr "Dragón"
msgid "type.dark"
-msgstr ""
+msgstr "Siniestro"
msgid "type.fairy"
-msgstr ""
+msgstr "Hada"
diff --git a/includes/i18n/es-ES/ui.po b/includes/i18n/es-ES/ui.po
index f1ca5b2f..8bb6b563 100644
--- a/includes/i18n/es-ES/ui.po
+++ b/includes/i18n/es-ES/ui.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/ui.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 20:55\n"
msgid "ui.button.close"
msgstr "Cerrar"
@@ -28,14 +28,14 @@ msgid "ui.button.save"
msgstr "Guardar ajustes"
msgid "ui.button.done"
-msgstr ""
+msgstr "Hecho"
msgid "ui.button.retry"
msgstr "Inténtalo de nuevo"
msgid "ui.dropdown.none_selected"
-msgstr ""
+msgstr ""
msgid "ui.paginate.go_to"
-msgstr ""
+msgstr "Ir a Página:"
diff --git a/includes/i18n/es-ES/user_setting.po b/includes/i18n/es-ES/user_setting.po
index 7f6b2186..332f74e9 100644
--- a/includes/i18n/es-ES/user_setting.po
+++ b/includes/i18n/es-ES/user_setting.po
@@ -13,42 +13,42 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_setting.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "user_setting.nickname.name"
-msgstr ""
+msgstr "Nickname"
msgid "user_setting.sign_out_everywhere.name"
-msgstr ""
+msgstr "Cerrar todas las sesiones"
msgid "user_setting.sign_out_everywhere.info"
-msgstr ""
+msgstr "Si cree que su cuenta ha sido comprometida, es posible cerrar sesión de todos los dispositivos que actualmente se han iniciado en su cuenta FreeField. Tenga en cuenta que si lo hace, también se cerrará sesión en este dispositivo y tendrá que autenticar de nuevo."
msgid "user_setting.sign_out_everywhere.button"
-msgstr ""
+msgstr "Cerrar sesión de todos los dispositivos"
msgid "user_setting.directions_provider.name"
-msgstr ""
+msgstr "Directions provider"
msgid "user_setting.interface_theme.name"
-msgstr ""
+msgstr "Interface theme"
msgid "user_setting.map_theme.name"
-msgstr ""
+msgstr "Map theme"
msgid "user_setting.icons.name"
-msgstr ""
+msgstr "Marcadores de mapa"
msgid "user_setting.species.name"
-msgstr ""
+msgstr "Iconos Pokémon"
msgid "user_setting.marker_component.name"
-msgstr ""
+msgstr "Task component for markers"
msgid "user_setting.cluster_limit.name"
-msgstr ""
+msgstr "Maximum visible markers"
# %1 = Number of POIs
msgid "user_setting.cluster_limit.option.default"
-msgstr ""
+msgstr "Default ({%1})"
diff --git a/includes/i18n/es-ES/user_settings.po b/includes/i18n/es-ES/user_settings.po
index 721fa3bd..a0c81105 100644
--- a/includes/i18n/es-ES/user_settings.po
+++ b/includes/i18n/es-ES/user_settings.po
@@ -13,32 +13,32 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_settings.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "user_settings.no_local_storage"
-msgstr ""
+msgstr "WARNING: Local storage is not supported in your browser! You will not be able to customize your FreeField appearance, and the map will not save your last viewed location for your next visit. The most likely cause of this error is using a severely out of date web browser. It is strongly recommended that you upgrade to a modern web browser in order to enjoy the full functionality of FreeField."
msgid "user_settings.reset.confirm"
-msgstr ""
+msgstr "Are you sure you want to reset all custom settings?"
msgid "user_settings.value.default"
-msgstr ""
+msgstr "Por defecto"
msgid "user_settings.page.title"
-msgstr ""
+msgstr "Ajustes"
msgid "user_settings.page.subtitle"
-msgstr ""
+msgstr "Personalize your experience"
msgid "user_settings.section.account"
-msgstr ""
+msgstr "Cuenta"
msgid "user_settings.section.map_providers"
-msgstr ""
+msgstr "Map providers"
msgid "user_settings.section.appearance"
-msgstr ""
+msgstr "Apariencia"
msgid "user_settings.section.performance"
-msgstr ""
+msgstr "Rendimiento"
diff --git a/includes/i18n/es-ES/webhook.po b/includes/i18n/es-ES/webhook.po
index 5271fd68..6d545cc7 100644
--- a/includes/i18n/es-ES/webhook.po
+++ b/includes/i18n/es-ES/webhook.po
@@ -13,29 +13,29 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/webhook.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-10-08 21:06\n"
msgid "webhook.report_title"
-msgstr ""
+msgstr "Field research reported!"
msgid "webhook.poi"
-msgstr ""
+msgstr "Pokeparada"
msgid "webhook.click_for_directions"
-msgstr ""
+msgstr "Click here for directions"
msgid "webhook.objective"
-msgstr ""
+msgstr "Objetivo"
msgid "webhook.reward"
-msgstr ""
+msgstr "Recompensa"
# %1 = Nickname of user who reported research
msgid "webhook.reported_by"
-msgstr ""
+msgstr "Reportado por {%1}"
# %1 = Research objective (e.g. "Make 3 Great Throws")
# %2 = Research reward (e.g. "1 Max Revive")
msgid "webhook.x_for_y"
-msgstr ""
+msgstr "{%1} para {%2}"
diff --git a/includes/i18n/es-ES/xhr.po b/includes/i18n/es-ES/xhr.po
index 7d4e4da0..652371da 100644
--- a/includes/i18n/es-ES/xhr.po
+++ b/includes/i18n/es-ES/xhr.po
@@ -13,41 +13,41 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: es-ES\n"
"X-Crowdin-File: /master/includes/i18n/en-US/xhr.po\n"
-"PO-Revision-Date: 2019-06-03 13:32\n"
+"PO-Revision-Date: 2019-10-08 21:17\n"
msgid "xhr.failed.reason.unknown_reason"
-msgstr ""
+msgstr "Unknown reason"
msgid "xhr.failed.reason.access_denied"
-msgstr ""
+msgstr "Acceso denegado"
msgid "xhr.failed.reason.missing_fields"
-msgstr ""
+msgstr "Insufficient data"
msgid "xhr.failed.reason.invalid_data"
-msgstr ""
+msgstr "Datos inválidos"
msgid "xhr.failed.reason.database_error"
-msgstr ""
+msgstr "Error de conexión de la base de datos"
msgid "xhr.failed.reason.http_405"
-msgstr ""
+msgstr "Method not allowed"
msgid "xhr.failed.reason.timeout"
-msgstr ""
+msgstr "Tiempo de espera agotado"
msgid "xhr.failed.reason.upstream_failed"
-msgstr ""
+msgstr "La solicitud del servidor principal no tuvo éxito"
msgid "xhr.failed.reason.objective_null"
-msgstr ""
+msgstr "No se ha elegido ningún objetivo de investigación"
msgid "xhr.failed.reason.reward_null"
-msgstr ""
+msgstr "No se ha seleccionado ninguna recompensa de investigación"
msgid "xhr.failed.reason.name_empty"
-msgstr ""
+msgstr "El nombre no puede estar vacío"
msgid "xhr.failed.reason.invalid_location"
-msgstr ""
+msgstr "La ubicación está fuera de límites"
diff --git a/includes/i18n/nb-NO/group.po b/includes/i18n/nb-NO/group.po
index 706a8bf0..4da6aed4 100644
--- a/includes/i18n/nb-NO/group.po
+++ b/includes/i18n/nb-NO/group.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/group.po\n"
-"PO-Revision-Date: 2019-06-03 13:32\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "group.selector.current"
msgstr "Gjeldende gruppe"
diff --git a/includes/i18n/nb-NO/install.po b/includes/i18n/nb-NO/install.po
index 6a103210..23ae611d 100644
--- a/includes/i18n/nb-NO/install.po
+++ b/includes/i18n/nb-NO/install.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/install.po\n"
-"PO-Revision-Date: 2019-06-03 13:17\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "install.button.continue"
msgstr "Fortsett oppsett"
diff --git a/includes/i18n/nb-NO/language.po b/includes/i18n/nb-NO/language.po
index 538e20af..7124f1c1 100644
--- a/includes/i18n/nb-NO/language.po
+++ b/includes/i18n/nb-NO/language.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/language.po\n"
-"PO-Revision-Date: 2019-06-03 13:32\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# The name of the language and country in English (e.g. "French (France)", "Spanish (Spain)")
msgid "language.name_english"
diff --git a/includes/i18n/nb-NO/login.po b/includes/i18n/nb-NO/login.po
index 88cfbb3a..2ddb1b55 100644
--- a/includes/i18n/nb-NO/login.po
+++ b/includes/i18n/nb-NO/login.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login.po\n"
-"PO-Revision-Date: 2019-06-03 13:32\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "login.title"
msgstr "Logg inn i FreeField"
diff --git a/includes/i18n/nb-NO/login_failed.po b/includes/i18n/nb-NO/login_failed.po
index 991799a7..65ab5d6f 100644
--- a/includes/i18n/nb-NO/login_failed.po
+++ b/includes/i18n/nb-NO/login_failed.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login_failed.po\n"
-"PO-Revision-Date: 2019-06-03 13:32\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "login_failed.title"
msgstr "Innlogging mislyktes"
diff --git a/includes/i18n/nb-NO/mobile.po b/includes/i18n/nb-NO/mobile.po
index 1b934fd0..0b0f4e1d 100644
--- a/includes/i18n/nb-NO/mobile.po
+++ b/includes/i18n/nb-NO/mobile.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/mobile.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "mobile.pwa.connecting"
msgstr "Kobler til"
diff --git a/includes/i18n/nb-NO/motd.po b/includes/i18n/nb-NO/motd.po
index 09eb9b24..0fd6b809 100644
--- a/includes/i18n/nb-NO/motd.po
+++ b/includes/i18n/nb-NO/motd.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/motd.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "motd.title"
msgstr "Dagens melding"
diff --git a/includes/i18n/nb-NO/multi.po b/includes/i18n/nb-NO/multi.po
index 934af0f5..4b3ead7f 100644
--- a/includes/i18n/nb-NO/multi.po
+++ b/includes/i18n/nb-NO/multi.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/multi.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# This string is a string displayed for type tasks. E.g. "Water-type" in "Catch
# 3 Water-type Pokémon."
diff --git a/includes/i18n/nb-NO/objective.po b/includes/i18n/nb-NO/objective.po
index 7919de84..a6760198 100644
--- a/includes/i18n/nb-NO/objective.po
+++ b/includes/i18n/nb-NO/objective.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/objective.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "objective.battle_gym.singular"
msgstr ""
diff --git a/includes/i18n/nb-NO/page_title.po b/includes/i18n/nb-NO/page_title.po
index f5541e46..4df4b86c 100644
--- a/includes/i18n/nb-NO/page_title.po
+++ b/includes/i18n/nb-NO/page_title.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/page_title.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "page_title.setup"
msgstr "FreeField-oppsett"
diff --git a/includes/i18n/nb-NO/parameter.po b/includes/i18n/nb-NO/parameter.po
index f7089449..cfeaa4d8 100644
--- a/includes/i18n/nb-NO/parameter.po
+++ b/includes/i18n/nb-NO/parameter.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/parameter.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
diff --git a/includes/i18n/nb-NO/poi.po b/includes/i18n/nb-NO/poi.po
index 23ae0b9a..244d931c 100644
--- a/includes/i18n/nb-NO/poi.po
+++ b/includes/i18n/nb-NO/poi.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/poi.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# %1 = Last updated date/time
msgid "poi.last.time"
diff --git a/includes/i18n/nb-NO/release_type.po b/includes/i18n/nb-NO/release_type.po
index f067b58c..8140fcff 100644
--- a/includes/i18n/nb-NO/release_type.po
+++ b/includes/i18n/nb-NO/release_type.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/release_type.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "release_type.stable.name"
msgstr "Stabil versjon"
diff --git a/includes/i18n/nb-NO/reward.po b/includes/i18n/nb-NO/reward.po
index 0ea5f140..6ca496f3 100644
--- a/includes/i18n/nb-NO/reward.po
+++ b/includes/i18n/nb-NO/reward.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/reward.po\n"
-"PO-Revision-Date: 2019-06-03 13:31\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "reward.poke_ball.general"
msgstr ""
diff --git a/includes/i18n/nb-NO/setting.po b/includes/i18n/nb-NO/setting.po
index 721b8d11..657ba6d6 100644
--- a/includes/i18n/nb-NO/setting.po
+++ b/includes/i18n/nb-NO/setting.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/setting.po\n"
-"PO-Revision-Date: 2019-06-04 15:26\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "setting.site.uri.name"
msgstr "Installasjons-URI"
diff --git a/includes/i18n/nb-NO/sidebar.po b/includes/i18n/nb-NO/sidebar.po
index 62f7b551..3b088585 100644
--- a/includes/i18n/nb-NO/sidebar.po
+++ b/includes/i18n/nb-NO/sidebar.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/sidebar.po\n"
-"PO-Revision-Date: 2019-06-04 13:39\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "sidebar.signed_in_as"
msgstr "Logget inn som"
diff --git a/includes/i18n/nb-NO/species.po b/includes/i18n/nb-NO/species.po
index db7b7cf0..612ac264 100644
--- a/includes/i18n/nb-NO/species.po
+++ b/includes/i18n/nb-NO/species.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/species.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# Note: These should only be translated if an official translation exists for
# these species in the language you are translating to. E.g. in German, the
diff --git a/includes/i18n/nb-NO/theme.po b/includes/i18n/nb-NO/theme.po
index 61062b32..ecd46d14 100644
--- a/includes/i18n/nb-NO/theme.po
+++ b/includes/i18n/nb-NO/theme.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/theme.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# This string is used to display the name and author of each installed icon set
# in the icon set drop-down selector. Example: "John's Amazing Map Markers (by
diff --git a/includes/i18n/nb-NO/type.po b/includes/i18n/nb-NO/type.po
index ad20f241..d4ea6780 100644
--- a/includes/i18n/nb-NO/type.po
+++ b/includes/i18n/nb-NO/type.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/type.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "type.normal"
msgstr ""
diff --git a/includes/i18n/nb-NO/ui.po b/includes/i18n/nb-NO/ui.po
index b9609d92..4fa8f78b 100644
--- a/includes/i18n/nb-NO/ui.po
+++ b/includes/i18n/nb-NO/ui.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/ui.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "ui.button.close"
msgstr "Lukk"
diff --git a/includes/i18n/nb-NO/user_setting.po b/includes/i18n/nb-NO/user_setting.po
index f83524fe..93df2b77 100644
--- a/includes/i18n/nb-NO/user_setting.po
+++ b/includes/i18n/nb-NO/user_setting.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_setting.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "user_setting.nickname.name"
msgstr "Kallenavn"
diff --git a/includes/i18n/nb-NO/user_settings.po b/includes/i18n/nb-NO/user_settings.po
index 37fa3cfb..a68f1fe4 100644
--- a/includes/i18n/nb-NO/user_settings.po
+++ b/includes/i18n/nb-NO/user_settings.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_settings.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
msgid "user_settings.no_local_storage"
msgstr "ADVARSEL: Lokal lagring (local storage) støttes ikke i nettleseren din! Du vil ikke kunne endre på utseendet til FreeField, og kartet vil ikke huske hvor du var sist til neste besøk. Den mest sannsynlige årsaken til dette er at du bruker en svært utdatert nettleser. Det anbefales på det sterkeste at du oppgraderer til en moderne nettleser slik at du kan ta i bruk alle FreeFields funksjoner."
diff --git a/includes/i18n/nb-NO/webhook.po b/includes/i18n/nb-NO/webhook.po
index 3fac21fc..895f2747 100644
--- a/includes/i18n/nb-NO/webhook.po
+++ b/includes/i18n/nb-NO/webhook.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/webhook.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "webhook.report_title"
msgstr "Oppgave rapportert!"
diff --git a/includes/i18n/nb-NO/xhr.po b/includes/i18n/nb-NO/xhr.po
index b8cfe3af..2a4d790b 100644
--- a/includes/i18n/nb-NO/xhr.po
+++ b/includes/i18n/nb-NO/xhr.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: nb\n"
"X-Crowdin-File: /master/includes/i18n/en-US/xhr.po\n"
-"PO-Revision-Date: 2019-06-03 13:30\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
msgid "xhr.failed.reason.unknown_reason"
msgstr "Ukjent feil"
diff --git a/includes/i18n/sv-SE/access_denied.po b/includes/i18n/sv-SE/access_denied.po
new file mode 100644
index 00000000..c2b61d76
--- /dev/null
+++ b/includes/i18n/sv-SE/access_denied.po
@@ -0,0 +1,27 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/access_denied.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "access_denied.title"
+msgstr "Access denied"
+
+msgid "access_denied.desc"
+msgstr "You do not have permission to view this page"
+
+# %1 = User identifier
+msgid "access_denied.info"
+msgstr "Your user account ({%1}) is not authorized to view this page. This could happen because you have not been assigned permissions to view this page, or if the site requires manual verification of accounts, your account may not have been approved yet. Please contact an administrator if you believe this is in error."
+
diff --git a/includes/i18n/sv-SE/admin.po b/includes/i18n/sv-SE/admin.po
new file mode 100644
index 00000000..00af73e7
--- /dev/null
+++ b/includes/i18n/sv-SE/admin.po
@@ -0,0 +1,817 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/admin.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# Paragraph text input above this string.
+msgid "admin.option.paragraph.disclaimer"
+msgstr "* The text may vary slightly from the preview above when rendered on the page."
+
+msgid "admin.option.paragraph.xss_warning"
+msgstr "The Markdown text contains JavaScript. For security reasons, the preview has been disabled."
+
+# File selection input
+# %1 =
+# %2 = File name and size according to display_format below
+# %3 =
+msgid "admin.option.file.current"
+msgstr "Current: {%1}{%2}{%3}"
+
+# %1 = (link to file)
+# %2 =
+# %3 = Name of currently used file for file upload inputs
+# %4 = Filesize in given unit
+# %5 = Filesize unit with IEC-style binary prefix (e.g. "B", "KiB", "MiB", "GiB")
+msgid "admin.option.file.display_format"
+msgstr "{%1}{%3}{%2} ({%4} {%5})"
+
+msgid "admin.option.file.size_unit.byte"
+msgstr "B"
+
+msgid "admin.option.file.size_unit.kilo"
+msgstr "KiB"
+
+msgid "admin.option.file.size_unit.mega"
+msgstr "MiB"
+
+msgid "admin.option.file.size_unit.giga"
+msgstr "GiB"
+
+# Geofence selection input
+msgid "admin.option.geofence.available"
+msgstr "Available geofences"
+
+# Icon set selector
+# %1 = User who created icon set
+msgid "admin.option.icon_set.authored_by"
+msgstr "Authored by {%1}"
+
+msgid "admin.validation.validation_failed"
+msgstr "One or more settings on this page are invalid. These have been marked with red color. Please correct invalid values before submitting."
+
+msgid "admin.validation.unsaved_changes"
+msgstr "You have unsaved changes! Are you sure you want to leave this page without saving?"
+
+msgid "admin.domain.main.name"
+msgstr "Site settings"
+
+msgid "admin.domain.main.desc"
+msgstr "FreeField basic configuration"
+
+msgid "admin.section.main.access.name"
+msgstr "Access"
+
+msgid "admin.section.main.instance.name"
+msgstr "Instance options"
+
+msgid "admin.section.main.motd.name"
+msgstr "Message of the Day"
+
+msgid "admin.section.main.spiders.name"
+msgstr "Crawling"
+
+msgid "admin.section.main.database.name"
+msgstr "Database"
+
+msgid "admin.domain.users.name"
+msgstr "Users"
+
+msgid "admin.domain.users.desc"
+msgstr "Manage users and user permissions"
+
+msgid "admin.section.users.require_approval.name"
+msgstr "Users awaiting approval"
+
+msgid "admin.section.users.user_list.name"
+msgstr "List of registered users"
+
+# This means the ID of the user as stored by the authentication provider of the
+# user, e.g. "@username" could be the provider identity for a user on Twitter.
+msgid "admin.table.users.user_list.column.provider_identity.name"
+msgstr "Provider identity"
+
+msgid "admin.table.users.user_list.column.provider.name"
+msgstr "Provider"
+
+msgid "admin.table.users.user_list.column.nickname.name"
+msgstr "Nickname"
+
+msgid "admin.table.users.user_list.column.group.name"
+msgstr "Group"
+
+msgid "admin.table.users.user_list.column.registered.name"
+msgstr "Registered"
+
+msgid "admin.table.users.user_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.table.users.anonymous"
+msgstr ""
+
+msgid "admin.table.users.deleted"
+msgstr ""
+
+msgid "admin.table.users.api_deleted"
+msgstr ""
+
+msgid "admin.section.users.user_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.section.users.user_list.action.approve"
+msgstr "Approve account"
+
+msgid "admin.section.users.user_list.action.reject"
+msgstr "Reject account"
+
+msgid "admin.section.users.user_list.action.delete"
+msgstr "Delete account"
+
+msgid "admin.section.users.user_list.action.invalidate"
+msgstr "Log out everywhere"
+
+# %1 = Padlock icon
+msgid "admin.section.users.user_list.unlock"
+msgstr "{%1} Click to unlock"
+
+msgid "admin.clientside.users.user_list.unlock_warning"
+msgstr "You are attempting to change settings for your own account. These settings are locked by default to prevent accidentally demoting or deleting your own account. Are you sure you wish to unlock this setting?"
+
+msgid "admin.domain.groups.name"
+msgstr "Groups"
+
+msgid "admin.domain.groups.desc"
+msgstr "Manage user groups for permission management"
+
+msgid "admin.section.groups.group_list.name"
+msgstr "List of groups"
+
+msgid "admin.table.groups.group_list.column.group_name.name"
+msgstr "Group"
+
+msgid "admin.table.groups.group_list.column.change_name.name"
+msgstr "Change name"
+
+msgid "admin.table.groups.group_list.column.permission.name"
+msgstr "Permission level"
+
+msgid "admin.table.groups.group_list.column.color.name"
+msgstr "Color"
+
+msgid "admin.table.groups.group_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.clientside.groups.group_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.clientside.groups.group_list.action.delete"
+msgstr "Delete group"
+
+msgid "admin.clientside.groups.popup.add_group"
+msgstr "Add group"
+
+msgid "admin.clientside.groups.popup.conflicting_levels"
+msgstr "Duplicate permission levels found! Two groups may not share the same permission level. Please ensure that the permission level for each group is unique, then try again."
+
+msgid "admin.clientside.groups.new"
+msgstr "New group"
+
+msgid "admin.section.groups.ui.add.name"
+msgstr "Add new group"
+
+msgid "admin.domain.pois.name"
+msgstr "Pokéstops"
+
+msgid "admin.domain.pois.desc"
+msgstr "Manage and remove submitted Pokéstop markers"
+
+# %1 = Amount of POIs
+msgid "admin.section.pois.poi_list.name"
+msgstr "List of Pokéstops ({%1})"
+
+msgid "admin.section.pois.batch.name"
+msgstr "Batch processing"
+
+msgid "admin.section.pois.clear.name"
+msgstr "Clear research data"
+
+msgid "admin.section.pois.import.name"
+msgstr "Import Pokéstops"
+
+msgid "admin.section.pois.preview_table.name"
+msgstr "Preview imported Pokéstops"
+
+msgid "admin.section.pois.export.name"
+msgstr "Export Pokéstops"
+
+msgid "admin.table.pois.poi_list.column.poi_name.name"
+msgstr "Name"
+
+msgid "admin.table.pois.poi_list.column.created_time.name"
+msgstr "Created"
+
+msgid "admin.table.pois.poi_list.column.created_by.name"
+msgstr "Created by"
+
+msgid "admin.table.pois.poi_list.column.current_research.name"
+msgstr "Current research"
+
+msgid "admin.table.pois.poi_list.column.last_updated_time.name"
+msgstr "Last updated"
+
+msgid "admin.table.pois.poi_list.column.last_updated_by.name"
+msgstr "Updated by"
+
+msgid "admin.table.pois.poi_list.column.location.name"
+msgstr "Location"
+
+msgid "admin.table.pois.poi_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.section.pois.poi_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.section.pois.poi_list.action.clear"
+msgstr "Clear research task"
+
+msgid "admin.section.pois.poi_list.action.delete"
+msgstr "Delete Pokéstop"
+
+msgid "admin.section.pois.poi_list.search"
+msgstr "Search Pokéstop names, research objectives, rewards, or usernames..."
+
+# %1 = , %2 =
+msgid "admin.section.pois.batch.desc"
+msgstr "It is possible to apply actions, such as deleting and clearing research, on a large number of Pokéstops at a time, using geofences. When you choose an action for a geofence, the selected action will be applied to all Pokéstops within the given geofence after any changes in the Pokéstops table above have finished processing. You can declare geofences on the {%1}geofence settings page{%2}."
+
+msgid "admin.table.pois.batch_list.column.label.name"
+msgstr "Geofence label"
+
+msgid "admin.table.pois.batch_list.column.poi_count.name"
+msgstr "Pokéstop count"
+
+msgid "admin.table.pois.batch_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.section.pois.batch_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.section.pois.batch_list.action.clear"
+msgstr "Clear all research tasks"
+
+msgid "admin.section.pois.batch_list.action.delete"
+msgstr "Delete all contained Pokéstops"
+
+msgid "admin.section.pois.batch_list.search"
+msgstr "Search geofence labels..."
+
+msgid "admin.section.pois.clear.desc"
+msgstr "For convenience, you can choose to clear all research data for all Pokéstops at once. This may be useful if the research task list has reset, for example during events or following monthly research task updates. Check the box below and click \"Save settings\" to clear research data from all Pokéstops."
+
+msgid "admin.section.pois.clear.perform.name"
+msgstr "Clear research data"
+
+msgid "admin.section.pois.clear.perform.label"
+msgstr "Clear research from all Pokéstops"
+
+msgid "admin.section.pois.import.file.name"
+msgstr "Choose file"
+
+msgid "admin.section.pois.import.file.desc"
+msgstr "Please select the file you wish to import Pokéstops from. *.csv files are accepted."
+
+msgid "admin.section.pois.import.name.name"
+msgstr "Name field"
+
+msgid "admin.section.pois.import.name.desc"
+msgstr "The field/column in the data set that corresponds to the names of the Pokéstops."
+
+msgid "admin.section.pois.import.latitude.name"
+msgstr "Latitude field"
+
+msgid "admin.section.pois.import.latitude.desc"
+msgstr "The field/column in the data set that corresponds to the latitudes of the Pokéstops."
+
+msgid "admin.section.pois.import.longitude.name"
+msgstr "Longitude field"
+
+msgid "admin.section.pois.import.longitude.desc"
+msgstr "The field/column in the data set that corresponds to the longitudes of the Pokéstops."
+
+msgid "admin.section.pois.import.selector.none"
+msgstr "< Please select >"
+
+msgid "admin.section.pois.import.selector.available"
+msgstr "Available fields"
+
+msgid "admin.table.pois.preview_table.column.include.name"
+msgstr "Import?"
+
+msgid "admin.table.pois.preview_table.column.poi_name.name"
+msgstr "Name"
+
+msgid "admin.table.pois.preview_table.column.latitude.name"
+msgstr "Latitude"
+
+msgid "admin.table.pois.preview_table.column.longitude.name"
+msgstr "Longitude"
+
+msgid "admin.clientside.pois.preview_table.actions.include"
+msgstr "Import"
+
+msgid "admin.clientside.pois.preview_table.actions.exclude"
+msgstr "Don't import"
+
+# %1 = Number of Pokéstops in the imported list of Pokéstops.
+msgid "admin.clientside.pois.import.count"
+msgstr "The selected input file contains {%1} Pokéstops."
+
+msgid "admin.section.pois.import.invalid_warning"
+msgstr "The preview table contains invalid data! Table rows with invalid data will not be imported."
+
+msgid "admin.section.pois.export.info"
+msgstr "You may export the list of Pokéstops stored in FreeField. The exported file can be used to re-import Pokéstops later in another FreeField instance. It serves as an easy way to take a backup of the database."
+
+msgid "admin.section.pois.export.do"
+msgstr "Click here to export the Pokéstop database"
+
+msgid "admin.domain.perms.name"
+msgstr "Permissions"
+
+msgid "admin.domain.perms.desc"
+msgstr "Set up access control for functionality"
+
+msgid "admin.section.perms.default.name"
+msgstr "Default settings"
+
+msgid "admin.section.perms.self_manage.name"
+msgstr "Account self-management"
+
+msgid "admin.section.perms.map_access.name"
+msgstr "Map access permissions"
+
+msgid "admin.section.perms.map_access.desc"
+msgstr "Warning! Restricting access to the map may qualify as commercial use with some map providers. You have the full responsibility to ensure that your map provider license allows for restricted access should you choose to restrict the permissions required to access the map."
+
+msgid "admin.section.perms.personalization.name"
+msgstr "Personalization restrictions"
+
+msgid "admin.section.perms.admin.name"
+msgstr "Administrative permissions"
+
+msgid "admin.domain.security.name"
+msgstr "Security"
+
+msgid "admin.domain.security.desc"
+msgstr "Secure user access and sessions"
+
+msgid "admin.section.security.user_creation.name"
+msgstr "User creation"
+
+msgid "admin.section.security.user_creation.desc"
+msgstr "Warning! Restricting access to the map may qualify as commercial use with some map providers. You have the full responsibility to ensure that your map provider license allows for restricted access should you choose to require user approval to interact with the map."
+
+msgid "admin.section.security.sessions.name"
+msgstr "Sessions"
+
+msgid "admin.section.security.sessions.desc"
+msgstr "Warning! Making changes to these settings may cause all currently signed in users to be logged out and required to re-authenticate. This is a security precaution to ensure all active sessions conform to the updated session security requirements."
+
+msgid "admin.section.security.outbound.name"
+msgstr "Outbound requests"
+
+msgid "admin.section.security.same_origin.name"
+msgstr "Same-origin policy"
+
+msgid "admin.domain.auth.name"
+msgstr "Authentication"
+
+msgid "admin.domain.auth.desc"
+msgstr "Authentication and third-party provider settings"
+
+msgid "admin.section.auth.discord.name"
+msgstr "Discord"
+
+# %1 = , %2 =
+msgid "admin.section.auth.discord.desc"
+msgstr "For information on how to set up Discord authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.section.auth.telegram.name"
+msgstr "Telegram"
+
+# %1 = , %2 =
+msgid "admin.section.auth.telegram.desc"
+msgstr "For information on how to set up Telegram authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.section.auth.reddit.name"
+msgstr "Reddit"
+
+# %1 = , %2 =
+msgid "admin.section.auth.reddit.desc"
+msgstr "For information on how to set up Reddit authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.section.auth.facebook.name"
+msgstr "Facebook"
+
+# %1 = , %2 =
+msgid "admin.section.auth.facebook.desc"
+msgstr "For information on how to set up Facebook authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.section.auth.line.name"
+msgstr "LINE"
+
+# %1 = , %2 =
+msgid "admin.section.auth.line.desc"
+msgstr "For information on how to set up LINE authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.section.auth.groupme.name"
+msgstr "GroupMe"
+
+# %1 = , %2 =
+msgid "admin.section.auth.groupme.desc"
+msgstr "For information on how to set up GroupMe authentication, please {%1}see the documentation{%2}."
+
+msgid "admin.domain.mobile.name"
+msgstr "Mobile"
+
+msgid "admin.domain.mobile.desc"
+msgstr "Mobile settings"
+
+msgid "admin.section.mobile.pwa.name"
+msgstr "Progressive Web App"
+
+msgid "admin.section.mobile.pwa.desc"
+msgstr "PWA enables users to pin the FreeField instance to their mobile device's home screens and allows using it as if FreeField was a standalone app on their device. PWA can greatly improve the user experience of FreeField for your users. If you wish to enable PWA, you are strongly recommended to {%1}read the documentation{%2} first! Ensure you understand the settings on this page before you enable PWA."
+
+msgid "admin.domain.themes.name"
+msgstr "Appearance"
+
+msgid "admin.domain.themes.desc"
+msgstr "Appearance settings"
+
+msgid "admin.section.themes.meta.name"
+msgstr "HTML meta settings"
+
+msgid "admin.section.themes.color.name"
+msgstr "Color theme"
+
+msgid "admin.section.themes.icons.name"
+msgstr "Map markers"
+
+msgid "admin.domain.map.name"
+msgstr "Map settings"
+
+msgid "admin.domain.map.desc"
+msgstr "Set up map settings and defaults"
+
+msgid "admin.section.map.provider.name"
+msgstr "Map provider"
+
+msgid "admin.section.map.provider.desc"
+msgstr "Warning! Most map providers require you to agree to their Terms of Service and/or some other legal contract when you register for their services. You have the full responsibility to ensure that you meet the requirements set forth by your chosen map provider, and that your usage of their services through FreeField is in line with their policies and your license to use their services."
+
+msgid "admin.section.map.default.name"
+msgstr "Defaults"
+
+msgid "admin.section.map.updates.name"
+msgstr "Map updates"
+
+msgid "admin.section.map.geofence.name"
+msgstr "Geofencing"
+
+# %1 = , %2 =
+msgid "admin.section.map.geofence.desc"
+msgstr "For information on how to set up geofence restrictions, please {%1}see the documentation{%2}."
+
+msgid "admin.domain.fences.name"
+msgstr "Geofences"
+
+msgid "admin.domain.fences.desc"
+msgstr "Manage geofences"
+
+msgid "admin.section.fences.fence_list.name"
+msgstr "List of geofences"
+
+msgid "admin.table.fences.fence_list.column.label.name"
+msgstr "Label"
+
+msgid "admin.table.fences.fence_list.column.vertices.name"
+msgstr "Vertices"
+
+msgid "admin.table.fences.fence_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.clientside.fences.fence_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.clientside.fences.fence_list.action.delete"
+msgstr "Delete geofence"
+
+msgid "admin.section.fences.ui.add.name"
+msgstr "Add new geofence"
+
+msgid "admin.domain.hooks.name"
+msgstr "Webhooks"
+
+msgid "admin.domain.hooks.desc"
+msgstr "Manage third-party webhook integrations"
+
+msgid "admin.section.hooks.active.name"
+msgstr "List of active webhooks"
+
+msgid "admin.section.hooks.inactive.name"
+msgstr "List of inactive webhooks"
+
+msgid "admin.section.hooks.settings.name"
+msgstr "Settings"
+
+msgid "admin.section.hooks.body.json.name"
+msgstr "JSON Body"
+
+msgid "admin.section.hooks.body.txt.name"
+msgstr "Text Body"
+
+msgid "admin.section.hooks.body.md.name"
+msgstr "Markdown Body"
+
+msgid "admin.section.hooks.body.html.name"
+msgstr "HTML Body"
+
+# %1 = , %2 =
+msgid "admin.section.hooks.objectives.name"
+msgstr "Objectives ({%1}+{%2})"
+
+# %1 = , %2 =
+msgid "admin.section.hooks.rewards.name"
+msgstr "Rewards ({%1}+{%2})"
+
+msgid "admin.clientside.hooks.popup.add_webhook"
+msgstr "Add webhook"
+
+msgid "admin.clientside.hooks.popup.add_objective"
+msgstr "Add objective"
+
+msgid "admin.clientside.hooks.popup.edit_objective"
+msgstr "Edit objective"
+
+msgid "admin.clientside.hooks.popup.add_reward"
+msgstr "Add reward"
+
+msgid "admin.clientside.hooks.popup.edit_reward"
+msgstr "Edit reward"
+
+msgid "admin.clientside.hooks.syntax.show"
+msgstr "Show help"
+
+msgid "admin.clientside.hooks.syntax.hide"
+msgstr "Hide help"
+
+msgid "admin.hooks.syntax.poi.title"
+msgstr "Pokéstop Information"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.poi"
+msgstr "{%1} = Pokéstop name"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.lat"
+msgstr "{%1} = Latitude"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.lng"
+msgstr "{%1} = Longitude"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.poi.coords"
+msgstr "{%1} = Coordinates (decimal degrees)"
+
+msgid "admin.hooks.syntax.research.title"
+msgstr "Research Task"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.objective"
+msgstr "{%1} = Research objective"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.reward"
+msgstr "{%1} = Research reward"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.reporter"
+msgstr "{%1} = Reporting user"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.research.time"
+msgstr "{%1} = Report time"
+
+msgid "admin.hooks.syntax.navigation.title"
+msgstr "Navigation"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.navigation.navurl"
+msgstr "{%1} = Navigation URL from default directions provider"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.navigation.navurl_arg"
+msgstr "{%1} = Navigation URL from specified directions provider"
+
+msgid "admin.hooks.syntax.icons.title"
+msgstr "Icon Set Images"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.icons.objective_icon"
+msgstr "{%1} = Objective icon"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.icons.reward_icon"
+msgstr "{%1} = Reward icon"
+
+msgid "admin.hooks.syntax.other.title"
+msgstr "Other Information"
+
+# %1 = Placeholder for syntax block (e.g. "<%OBJECTIVE%>")
+msgid "admin.hooks.syntax.other.i18n"
+msgstr "{%1} = Translated string"
+
+msgid "admin.clientside.hooks.any_objective"
+msgstr "Any objective"
+
+msgid "admin.clientside.hooks.any_reward"
+msgstr "any reward"
+
+# %1 = One or more research objectives (e.g. "Make 3 Great Throws")
+msgid "admin.clientside.hooks.any_objective_except"
+msgstr "Any objective except {%1}"
+
+# %1 = One or more research rewards (e.g. "1 Max Revive")
+msgid "admin.clientside.hooks.any_reward_except"
+msgstr "any reward except {%1}"
+
+# Used to combine multiple objectives or rewards via "or" conditionals.
+# %1 = Research objective or reward #1 (e.g. "Make 3 Great Throws", "1 Max
+# Revive"), %2 = Research objective or reward #2
+msgid "admin.clientside.hooks.multi_or"
+msgstr "{%1} or {%2}"
+
+# Used to combine multiple objectives or rewards via "and" conditionals.
+# %1 = Research objective or reward #1 (e.g. "Make 3 Great Throws", "1 Max
+# Revive"), %2 = Research objective or reward #2
+msgid "admin.clientside.hooks.multi_and"
+msgstr "{%1} and {%2}"
+
+# %1 = Reason
+msgid "admin.clientside.hooks.update.objective.failed.message"
+msgstr "Failed to set research objective: {%1}"
+
+# %1 = Reason
+msgid "admin.clientside.hooks.update.reward.failed.message"
+msgstr "Failed to set research reward: {%1}"
+
+# Fallback for webhook target when the target cannot be identified; typically
+# displayed instead of a domain name
+msgid "admin.clientside.domain.unknown"
+msgstr "?"
+
+# Telegram specific setting
+msgid "admin.clientside.hooks.tg.xhr.groups.failed.empty_token"
+msgstr "Please enter a bot token first!"
+
+# Telegram specific setting
+msgid "admin.clientside.hooks.tg.xhr.groups.failed.no_groups"
+msgstr "No groups were found!"
+
+# Telegram specific setting
+msgid "admin.hooks.popup.tg.searching_group"
+msgstr "Searching for groups..."
+
+# Telegram specific setting
+msgid "admin.hooks.popup.tg.select_group"
+msgstr "Select group"
+
+msgid "admin.section.hooks.ui.add.name"
+msgstr "Add new webhook"
+
+msgid "admin.domain.api.name"
+msgstr "API access"
+
+msgid "admin.domain.api.desc"
+msgstr "Manage API access and integrations"
+
+msgid "admin.section.api.client_list.name"
+msgstr "List of registered clients"
+
+msgid "admin.table.api.client_list.column.name.name"
+msgstr "Client name"
+
+msgid "admin.table.api.client_list.column.color.name"
+msgstr "Display color"
+
+msgid "admin.table.api.client_list.column.token.name"
+msgstr "Access token"
+
+msgid "admin.table.api.client_list.column.seen.name"
+msgstr "Last seen"
+
+msgid "admin.table.api.client_list.column.access.name"
+msgstr "Permissions"
+
+msgid "admin.table.api.client_list.column.actions.name"
+msgstr "Actions"
+
+msgid "admin.table.api.client_list.column.token.mask"
+msgstr "Click to view"
+
+msgid "admin.clientside.api.client_list.action.none"
+msgstr "(no action)"
+
+msgid "admin.clientside.api.client_list.action.reset"
+msgstr "Reset access token"
+
+msgid "admin.clientside.api.client_list.action.delete"
+msgstr "Delete client"
+
+msgid "admin.section.api.ui.add.name"
+msgstr "Add new client"
+
+msgid "admin.section.api.ui.copy.name"
+msgstr "Copy to clipboard"
+
+msgid "admin.clientside.api.client_list.token.new"
+msgstr "(Save to generate token)"
+
+msgid "admin.clientside.api.client_list.seen.never"
+msgstr "Never"
+
+msgid "admin.clientside.api.client_list.access.level"
+msgstr "Permission level:"
+
+msgid "admin.clientside.api.client_list.access.none"
+msgstr "No permissions granted"
+
+msgid "admin.api.popup.view_token.title"
+msgstr "Access token"
+
+msgid "admin.api.popup.view_token.client_name"
+msgstr "Client name:"
+
+msgid "admin.api.popup.access_list.title"
+msgstr "Access settings"
+
+msgid "admin.api.popup.access_list.client_name"
+msgstr "Client name:"
+
+msgid "admin.api.popup.access_list.level"
+msgstr "Permission level:"
+
+msgid "admin.domain.updates.name"
+msgstr "Updates"
+
+msgid "admin.domain.updates.desc"
+msgstr "Update FreeField to a newer version"
+
+msgid "admin.section.updates.info.name"
+msgstr "Version information"
+
+msgid "admin.section.updates.available.name"
+msgstr "Available releases"
+
+# %1 = Warning triangle symbol
+msgid "admin.section.updates.git.name"
+msgstr "{%1} Manual update required!"
+
+# %1 = , %2 =
+msgid "admin.section.updates.git.desc"
+msgstr "You appear to have installed FreeField by cloning FreeField's GitHub repository. In order to ensure updates compatibility with source control, updates must also be installed using Git. To update FreeField to the latest bleeding-edge version, use {%1}git pull{%2}. Alternatively, you can switch to release-based updates, which lets you install updates using the releases menu below. To do this, unlink from Git by deleting the .git folder in FreeField. Please see the documentation for more information."
+
+msgid "admin.section.updates.available.release_notes"
+msgstr "Release notes"
+
+msgid "admin.section.updates.ui.update.name"
+msgstr "Install update"
+
+msgid "admin.section.updates.ui.install.name"
+msgstr "Install"
+
+msgid "admin.updates.popup.confirm_install.title"
+msgstr "Confirm update"
+
+msgid "admin.updates.popup.confirm_install.disclaimer"
+msgstr "You are about to install an update to FreeField. WARNING: The FreeField developers cannot guarantee the stability of this update or the update process itself. If you proceed with installation, you do so at your own risk and responsibility."
+
+msgid "admin.updates.popup.confirm_install.target"
+msgstr "Target version:"
+
+msgid "admin.updates.popup.confirm_install.liability_statement"
+msgstr "I will not hold the FreeField developers liable if my FreeField instance breaks as a result of this update"
+
diff --git a/includes/i18n/sv-SE/approve_user.po b/includes/i18n/sv-SE/approve_user.po
new file mode 100644
index 00000000..865656af
--- /dev/null
+++ b/includes/i18n/sv-SE/approve_user.po
@@ -0,0 +1,61 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/approve_user.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.title"
+msgstr "User approval"
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.desc"
+msgstr "Administrative approval required"
+
+# Displayed if the user for whom the link was created visits the page.
+msgid "approve_user.user.info"
+msgstr "This link is for administrators only. Please contact an administrator to have your account approved."
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.title"
+msgstr "User approval request"
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.desc"
+msgstr "A user has requested account approval"
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.admin.info"
+msgstr "The following user has requested account approval:"
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.button.approve"
+msgstr "Approve"
+
+# Displayed if an administrator visits the page.
+msgid "approve_user.button.reject"
+msgstr "Reject"
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.title"
+msgstr "User approval"
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.desc"
+msgstr "User approval failed"
+
+# Displayed if the user is not in the approval queue.
+msgid "approve_user.approved.info"
+msgstr "This user is not in the approval queue."
+
diff --git a/includes/i18n/sv-SE/awaiting_approval.po b/includes/i18n/sv-SE/awaiting_approval.po
new file mode 100644
index 00000000..6735645b
--- /dev/null
+++ b/includes/i18n/sv-SE/awaiting_approval.po
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/awaiting_approval.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "awaiting_approval.title"
+msgstr "Approval required"
+
+msgid "awaiting_approval.desc"
+msgstr "Your account is awaiting manual approval"
+
+msgid "awaiting_approval.info.1"
+msgstr "Thank you for your registration! This site requires manual approval of new accounts. Until your account has been approved, you will not have access to features that require membership."
+
+msgid "awaiting_approval.info.2.qr_enabled"
+msgstr "Administrators can approve your account. Please show them this QR code, or send them the link below, to assist them in identifying and approving your account on FreeField. Administrators can also look up your account by your username."
+
+msgid "awaiting_approval.info.2.qr_disabled"
+msgstr "Administrators can approve your account. Please send them the link below to assist them in identifying and approving your account on FreeField. Administrators can also look up your account by your username."
+
+msgid "awaiting_approval.using.qr.head"
+msgstr "Approval QR code"
+
+msgid "awaiting_approval.using.link.head"
+msgstr "Approval link"
+
+msgid "awaiting_approval.using.link.info"
+msgstr "Administrators can use this URL to approve your account."
+
+msgid "awaiting_approval.return_button"
+msgstr "Return to main page"
+
diff --git a/includes/i18n/sv-SE/category.po b/includes/i18n/sv-SE/category.po
new file mode 100644
index 00000000..90ae675d
--- /dev/null
+++ b/includes/i18n/sv-SE/category.po
@@ -0,0 +1,84 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/category.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# Label for objectives which are currently in-game (e.g. monthly, event, etc.)
+msgid "category.objective.current"
+msgstr "Current objectives"
+
+msgid "category.objective.battle"
+msgstr "Battle objectives"
+
+msgid "category.objective.raid"
+msgstr "Raid objectives"
+
+msgid "category.objective.catch"
+msgstr "Catch objectives"
+
+msgid "category.objective.item"
+msgstr "Item objectives"
+
+msgid "category.objective.buddy"
+msgstr "Buddy objectives"
+
+msgid "category.objective.hatch"
+msgstr "Egg objectives"
+
+msgid "category.objective.evolve"
+msgstr "Evolution objectives"
+
+msgid "category.objective.power_up"
+msgstr "Power-up objectives"
+
+msgid "category.objective.transfer"
+msgstr "Transfer objectives"
+
+msgid "category.objective.throwing_skill"
+msgstr "Throwing skill objectives"
+
+msgid "category.objective.explore"
+msgstr "Exploration objectives"
+
+msgid "category.objective.social"
+msgstr "Social objectives"
+
+msgid "category.reward.ball"
+msgstr "Ball rewards"
+
+msgid "category.reward.berry"
+msgstr "Berry rewards"
+
+msgid "category.reward.potion"
+msgstr "Potion rewards"
+
+msgid "category.reward.revive"
+msgstr "Revive rewards"
+
+msgid "category.reward.evolution_item"
+msgstr "Evolution item rewards"
+
+msgid "category.reward.tm"
+msgstr "TM rewards"
+
+msgid "category.reward.stardust"
+msgstr "Stardust rewards"
+
+msgid "category.reward.candy"
+msgstr "Candy rewards"
+
+msgid "category.reward.encounter"
+msgstr "Encounter rewards"
+
diff --git a/includes/i18n/sv-SE/clustering.po b/includes/i18n/sv-SE/clustering.po
new file mode 100644
index 00000000..716438c5
--- /dev/null
+++ b/includes/i18n/sv-SE/clustering.po
@@ -0,0 +1,23 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/clustering.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# %1 = Number of POIs hidden from map
+# %2 = Total number of POIs that are supposed to be visible in the map view
+# %3 = "Hidden" icon graphic
+msgid "clustering.banner"
+msgstr "{%3} {%1}/{%2}"
+
diff --git a/includes/i18n/sv-SE/generation.po b/includes/i18n/sv-SE/generation.po
new file mode 100644
index 00000000..916c72d0
--- /dev/null
+++ b/includes/i18n/sv-SE/generation.po
@@ -0,0 +1,29 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/generation.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "generation.1.label"
+msgstr "Generation I"
+
+msgid "generation.2.label"
+msgstr "Generation II"
+
+msgid "generation.3.label"
+msgstr "Generation III"
+
+msgid "generation.4.label"
+msgstr "Generation IV"
+
diff --git a/includes/i18n/sv-SE/geo.po b/includes/i18n/sv-SE/geo.po
new file mode 100644
index 00000000..0fe3816e
--- /dev/null
+++ b/includes/i18n/sv-SE/geo.po
@@ -0,0 +1,40 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/geo.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# This string determines how coordinate strings are displayed (consider the
+# order of the coordinates, whether there should be a comma, etc.)
+# %1 = Latitude, %2 = Longitude
+# E.g. %1 = "40.1234°N", %2 = "10.4321°E"
+msgid "geo.location.string"
+msgstr "{%1}, {%2}"
+
+# %1 = Degrees
+msgid "geo.direction.deg_north"
+msgstr "{%1}°N"
+
+# %1 = Degrees
+msgid "geo.direction.deg_south"
+msgstr "{%1}°S"
+
+# %1 = Degrees
+msgid "geo.direction.deg_east"
+msgstr "{%1}°E"
+
+# %1 = Degrees
+msgid "geo.direction.deg_west"
+msgstr "{%1}°W"
+
diff --git a/includes/i18n/sv-SE/group.po b/includes/i18n/sv-SE/group.po
new file mode 100644
index 00000000..eca4e82c
--- /dev/null
+++ b/includes/i18n/sv-SE/group.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/group.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "group.selector.current"
+msgstr "Current group"
+
+msgid "group.selector.available"
+msgstr "Available groups"
+
+msgid "group.level.unknown"
+msgstr "Unknown group"
+
+msgid "group.level.anonymous"
+msgstr "Anonymous visitor"
+
+msgid "group.level.read_only"
+msgstr "Read-only member"
+
+msgid "group.level.registered"
+msgstr "Registered member"
+
+msgid "group.level.submitter"
+msgstr "Pokéstop submitter"
+
+msgid "group.level.moderator"
+msgstr "Moderator"
+
+msgid "group.level.admin"
+msgstr "Administrator"
+
+msgid "group.level.host"
+msgstr "Site host"
+
diff --git a/includes/i18n/sv-SE/install.po b/includes/i18n/sv-SE/install.po
new file mode 100644
index 00000000..6f890f62
--- /dev/null
+++ b/includes/i18n/sv-SE/install.po
@@ -0,0 +1,168 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/install.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "install.button.continue"
+msgstr "Continue setup"
+
+msgid "install.button.finish"
+msgstr "Finish setup"
+
+msgid "install.button.retry"
+msgstr "Try again"
+
+msgid "install.operation.done"
+msgstr "The results of the operation are listed below."
+
+msgid "install.stage.1.title"
+msgstr "Stage 1: Environment checks"
+
+msgid "install.stage.1.info"
+msgstr "Welcome to FreeField! This wizard will guide you through the installation of FreeField on your server. Below are some preliminary checks of your system environment."
+
+msgid "install.stage.1.assert.https"
+msgstr "Encrypted connection (HTTPS) - required for geolocation and PWA"
+
+msgid "install.stage.1.assert.root_writable"
+msgstr "Installation directory writable - required for software updates"
+
+msgid "install.stage.1.assert.userdata_writable"
+msgstr "Userdata directory writable - required for core functionality"
+
+msgid "install.stage.1.assert.curl_available"
+msgstr "cURL extension loaded - required for authentication and updates"
+
+msgid "install.stage.1.assert.gd_available"
+msgstr "gd extension loaded - required for QR code generation"
+
+msgid "install.stage.1.assert.openssl_available"
+msgstr "openssl extension loaded - required for secure storage and sessions"
+
+msgid "install.stage.1.assert.phar_available"
+msgstr "PharData available - required for software updates"
+
+msgid "install.stage.1.checks"
+msgstr "Please ensure that all the above checks are passing (green checkmark). FreeField will work even if some entries fail with a yellow exclamation mark, though some features will be unavailable. FreeField will not work if any of the above checks fail with a red X. If you wish to fix any failing checks above, please do the relevant changes to your server configuration now, then refresh the page before proceeding."
+
+msgid "install.stage.1.next"
+msgstr "When you have applied the desired changes, click the button below to continue to the next step, and write a configuration file."
+
+msgid "install.stage.2.title"
+msgstr "Stage 2: Write configuration file"
+
+msgid "install.stage.2.assert.copy_templates"
+msgstr "Copied file options from template files"
+
+msgid "install.stage.2.assert.authkeys_written"
+msgstr "Secure storage encryption keys generated"
+
+msgid "install.stage.2.assert.config_written"
+msgstr "Configuration file written"
+
+msgid "install.stage.2.next"
+msgstr "Please click the button below to continue to database setup."
+
+msgid "install.stage.3.title"
+msgstr "Stage 3: Database setup"
+
+msgid "install.stage.3.info"
+msgstr "Please fill in the following database backend details."
+
+msgid "install.stage.3.assert.valid_data"
+msgstr "Database details are valid"
+
+msgid "install.stage.3.assert.config_written"
+msgstr "Configuration file updated"
+
+msgid "install.stage.3.assert.db_connected"
+msgstr "Connected to database"
+
+msgid "install.stage.3.assert.exec_sql"
+msgstr "Created database structure"
+
+msgid "install.stage.3.assert.proceed_stage"
+msgstr "Stage 3 registered complete"
+
+msgid "install.stage.3.next"
+msgstr "Please click the button below to continue to authentication setup."
+
+msgid "install.stage.4.title"
+msgstr "Stage 4: Authentication setup"
+
+msgid "install.stage.4.info"
+msgstr "Please choose one or more authentiation providers from the list below, and configure it to enable signing in with the given authentication provider. Please refer to the documentation for more information on how to properly configure each authentication provider."
+
+msgid "install.stage.4.assert.valid_data"
+msgstr "Provided authentication details are valid"
+
+msgid "install.stage.4.assert.config_written"
+msgstr "Configuration file updated"
+
+msgid "install.stage.4.assert.any_enabled"
+msgstr "At least one authentication provider is enabled"
+
+msgid "install.stage.4.assert.proceed_stage"
+msgstr "Prepared authentication challenge"
+
+msgid "install.stage.4.next"
+msgstr "When you continue, you will be prompted to sign in using one of the authentication providers you set up."
+
+msgid "install.stage.5.title"
+msgstr "Stage 5: Verify authentication setup"
+
+msgid "install.stage.5.assert.auth_success"
+msgstr "Authentication successful"
+
+msgid "install.stage.5.assert.user_created"
+msgstr "Registered account as site administrator in database"
+
+msgid "install.stage.5.assert.config_written"
+msgstr "Configuration file updated"
+
+msgid "install.stage.5.next"
+msgstr "Please click the button below to continue to map setup."
+
+msgid "install.stage.6.title"
+msgstr "Stage 6: Configure map"
+
+msgid "install.stage.6.provider_info"
+msgstr "Please choose an available map provider from the following list of map providers."
+
+msgid "install.stage.6.disclaimer"
+msgstr "Warning! Most map providers require you to agree to their Terms of Service and/or some other legal contract when you register for their services. You have the full responsibility to ensure that you meet the requirements set forth by your chosen map provider, and that your usage of their services through FreeField is in line with their policies and your license to use their services."
+
+msgid "install.stage.6.field_guide"
+msgstr "Please enter the access token and/or other required parameters for your selected map provider below. You only have to fill the fields relevant to the map provider you chose above - all others can be left blank."
+
+msgid "install.stage.6.default_info"
+msgstr "Please configure the default map center point for your FreeField installation. The map center point is the location the map is centered on by default, and should be central coordinate location in the city/area you are covering with FreeField. E.g. if you are setting your FreeField instance up for covering New York City, then enter a coordinate pair for a centrally located point in New York City."
+
+msgid "install.stage.6.assert.valid_data"
+msgstr "Provided map settings are valid"
+
+msgid "install.stage.6.assert.config_written"
+msgstr "Configuration file updated"
+
+msgid "install.stage.6.next"
+msgstr "Congratulations! You have finished setting up FreeField. You may now proceed to, and use, your FreeField instance. When you click the button below, you will be redirected to the administration interface. Please finish setting up FreeField there, and customize the software to your liking."
+
+msgid "install.stage.6.post_install.head"
+msgstr "Warning!"
+
+# %1 = , %2 =
+msgid "install.stage.6.post_install.body"
+msgstr "There are still a few things you should configure before you grant others access to FreeField. Please carefully review the {%1}post-installation steps{%2} in the documentation before you proceed."
+
diff --git a/includes/i18n/sv-SE/language.po b/includes/i18n/sv-SE/language.po
new file mode 100644
index 00000000..9c9f52a0
--- /dev/null
+++ b/includes/i18n/sv-SE/language.po
@@ -0,0 +1,25 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/language.po\n"
+"PO-Revision-Date: 2019-07-21 20:14\n"
+
+# The name of the language and country in English (e.g. "French (France)", "Spanish (Spain)")
+msgid "language.name_english"
+msgstr "Swedish (Sweden)"
+
+# The native name of the language and country (e.g. "Français (France)", "Español (España)")
+msgid "language.name_native"
+msgstr "Svenska (Sverige)"
+
diff --git a/includes/i18n/sv-SE/login.po b/includes/i18n/sv-SE/login.po
new file mode 100644
index 00000000..d484f596
--- /dev/null
+++ b/includes/i18n/sv-SE/login.po
@@ -0,0 +1,36 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/login.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "login.title"
+msgstr "Log in to FreeField"
+
+msgid "login.desc"
+msgstr "Please select an authentication provider below"
+
+# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
+msgid "login.perform"
+msgstr "Log in using {%1}"
+
+msgid "login.reconfigure"
+msgstr "Reconfigure"
+
+msgid "login.telegram.title"
+msgstr "Authenticate with Telegram"
+
+msgid "login.telegram.body"
+msgstr "Please click the button below to sign in using Telegram"
+
diff --git a/includes/i18n/sv-SE/login_failed.po b/includes/i18n/sv-SE/login_failed.po
new file mode 100644
index 00000000..f24c3b39
--- /dev/null
+++ b/includes/i18n/sv-SE/login_failed.po
@@ -0,0 +1,30 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/login_failed.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "login_failed.title"
+msgstr "Login failed"
+
+msgid "login_failed.default_auth_provider"
+msgstr "your authentication provider"
+
+# %1 = Authentication provider (e.g. "Discord", "Telegram", etc.)
+msgid "login_failed.desc"
+msgstr "Could not authenticate with {%1}"
+
+msgid "login_failed.info"
+msgstr "Your authentication attempt with {%1} failed. Do you wish to try again?"
+
diff --git a/includes/i18n/sv-SE/mobile.po b/includes/i18n/sv-SE/mobile.po
new file mode 100644
index 00000000..8b234b40
--- /dev/null
+++ b/includes/i18n/sv-SE/mobile.po
@@ -0,0 +1,20 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/mobile.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "mobile.pwa.connecting"
+msgstr "Connecting"
+
diff --git a/includes/i18n/sv-SE/motd.po b/includes/i18n/sv-SE/motd.po
new file mode 100644
index 00000000..e40e293d
--- /dev/null
+++ b/includes/i18n/sv-SE/motd.po
@@ -0,0 +1,26 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/motd.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "motd.title"
+msgstr "Message of the Day"
+
+msgid "motd.hide"
+msgstr "Do not show this message again"
+
+msgid "motd.close"
+msgstr "Close"
+
diff --git a/includes/i18n/sv-SE/multi.po b/includes/i18n/sv-SE/multi.po
new file mode 100644
index 00000000..3c13d657
--- /dev/null
+++ b/includes/i18n/sv-SE/multi.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/multi.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# This string is a string displayed for type tasks. E.g. "Water-type" in "Catch
+# 3 Water-type Pokémon."
+# %1 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.single"
+msgstr "{%1}-type"
+
+# This string is a string displayed for type tasks. E.g. "Water, Fire or
+# Grass-type" in "Catch 3 Water, Fire or Grass-type Pokémon."
+# %1 and %2 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.double"
+msgstr "{%1} or {%2}-type"
+
+# This string is a string displayed for type tasks. E.g. "Water or Grass-type"
+# in "Catch 3 Water or Grass-type Pokémon."
+# %1 through %3 = Type of catch ("Ice", "Water", etc.)
+msgid "multi.type.triple"
+msgstr "{%1}, {%2} or {%3}-type"
+
+# This string is a string used to display and concatenate multiple species.
+# E.g. "Bulbasaur or Squirtle" in "Catch a Bulbasaur or Squirtle."
+# %1 through %3 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "multi.species.double"
+msgstr "{%1} or {%2}"
+
+# This string is a string used to display and concatenate multiple species.
+# E.g. "Bulbasaur, Charmander or Squirtle" in "Catch a Bulbasaur, Charmander or
+# Squirtle."
+msgid "multi.species.triple"
+msgstr "{%1}, {%2} or {%3}"
+
diff --git a/includes/i18n/sv-SE/objective.po b/includes/i18n/sv-SE/objective.po
new file mode 100644
index 00000000..ea8048d3
--- /dev/null
+++ b/includes/i18n/sv-SE/objective.po
@@ -0,0 +1,323 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/objective.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "objective.battle_gym.singular"
+msgstr "Battle in a Gym"
+
+# %1 = Number of battles
+msgid "objective.battle_gym.plural"
+msgstr "Battle in a Gym {%1} times"
+
+msgid "objective.win_gym.singular"
+msgstr "Win a Gym battle"
+
+# %1 = Number of battles
+msgid "objective.win_gym.plural"
+msgstr "Win {%1} Gym battles"
+
+msgid "objective.battle_raid.singular"
+msgstr "Battle in a raid"
+
+# %1 = Number of raids
+msgid "objective.battle_raid.plural"
+msgstr "Battle in a raid {%1} times"
+
+msgid "objective.win_raid.singular"
+msgstr "Win a raid"
+
+# %1 = Number of raids
+msgid "objective.win_raid.plural"
+msgstr "Win {%1} raids"
+
+# %1 = Raid tier
+msgid "objective.level_raid.singular"
+msgstr "Win a level {%1} or higher raid"
+
+# %1 = Raid tier, %2 = Number of raids
+msgid "objective.level_raid.plural"
+msgstr "Win {%2} level {%1} or higher raids"
+
+msgid "objective.se_charge.singular"
+msgstr "Use a Super Effective Charged attack in a Gym battle"
+
+# %1 = Number of battles
+msgid "objective.se_charge.plural"
+msgstr "Use a Super Effective Charged attack in {%1} Gym battles"
+
+msgid "objective.catch.singular"
+msgstr "Catch a Pokémon"
+
+# %1 = Number of catches
+msgid "objective.catch.plural"
+msgstr "Catch {%1} Pokémon"
+
+msgid "objective.catch_weather.singular"
+msgstr "Catch a Pokémon with Weather Boost"
+
+# %1 = Number of catches
+msgid "objective.catch_weather.plural"
+msgstr "Catch {%1} Pokémon with Weather Boost"
+
+# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.catch_type.singular"
+msgstr "Catch a {%1} Pokémon"
+
+# %1 = Type(s) of catch ("Ice-type", "Fire or Ground-type", etc.),
+# %2 = Number of catches
+msgid "objective.catch_type.plural"
+msgstr "Catch {%2} {%1} Pokémon"
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.)
+msgid "objective.catch_specific.singular"
+msgstr "Catch a {%1}"
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.), %2 = Number of catches
+msgid "objective.catch_specific.plural"
+msgstr "Catch {%2} {%1}"
+
+msgid "objective.catch_daily.singular"
+msgstr "Catch a Pokémon 1 day in a row"
+
+# %1 = Number of days in a row
+msgid "objective.catch_daily.plural"
+msgstr "Catch a Pokémon {%1} days in a row"
+
+msgid "objective.use_berry.singular"
+msgstr "Use a Berry to help catch Pokémon"
+
+# %1 = Number of berries
+msgid "objective.use_berry.plural"
+msgstr "Use {%1} Berries to help catch Pokémon"
+
+# %1 = Item to use (e.g. "Pinap Berry")
+msgid "objective.use_item_encounter.singular"
+msgstr "Use a {%1} to help catch Pokémon"
+
+# %1 = Item to use (e.g. "Pinap Berry")
+# %2 = Number of items
+msgid "objective.use_item_encounter.plural"
+msgstr "Use {%2} {%1} to help catch Pokémon"
+
+msgid "objective.buddy_candy.singular"
+msgstr "Earn a Candy walking with your buddy"
+
+# %1 = Number of candies
+msgid "objective.buddy_candy.plural"
+msgstr "Earn {%1} Candies walking with your buddy"
+
+msgid "objective.hatch.singular"
+msgstr "Hatch an Egg"
+
+# %1 = Number of eggs
+msgid "objective.hatch.plural"
+msgstr "Hatch {%1} Eggs"
+
+msgid "objective.evolve.singular"
+msgstr "Evolve a Pokémon"
+
+# %1 = Number of evolves
+msgid "objective.evolve.plural"
+msgstr "Evolve {%1} Pokémon"
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.evolve_type.singular"
+msgstr "Evolve a {%1} Pokémon"
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+# %2 = Number of evolves
+msgid "objective.evolve_type.plural"
+msgstr "Evolve {%2} {%1} Pokémon"
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+msgid "objective.evolve_evolution.singular"
+msgstr "Evolve an evolved {%1} Pokémon"
+
+# %1 = Type(s) of species ("Ice-type", "Fire or Ground-type", etc.)
+# %2 = Number of evolves
+msgid "objective.evolve_evolution.plural"
+msgstr "Evolve {%2} evolved {%1} Pokémon"
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.)
+msgid "objective.evolve_specific.singular"
+msgstr "Evolve a {%1}"
+
+# %1 = The name of one or more species ("Pikachu", "Squirtle or Charmander",
+# etc.), %2 = Number of evolves
+msgid "objective.evolve_specific.plural"
+msgstr "Evolve {%2} {%1}"
+
+msgid "objective.evolve_item.singular"
+msgstr "Use an item to evolve a Pokémon"
+
+# %1 = Number of evolves
+msgid "objective.evolve_item.plural"
+msgstr "Use items to evolve Pokémon {%1} times"
+
+msgid "objective.power_up.singular"
+msgstr "Power up a Pokémon"
+
+# %1 = Number of power-ups
+msgid "objective.power_up.plural"
+msgstr "Power up a Pokémon {%1} times"
+
+msgid "objective.transfer.singular"
+msgstr "Transfer a Pokémon"
+
+# %1 = Number of transfers
+msgid "objective.transfer.plural"
+msgstr "Transfer {%1} Pokémon"
+
+msgid "objective.throw_simple_nice.singular"
+msgstr "Make a Nice Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_nice.plural"
+msgstr "Make {%1} Nice Throws"
+
+msgid "objective.throw_simple_nice_chain.singular"
+msgstr "Make 1 Nice Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_nice_chain.plural"
+msgstr "Make {%1} Nice Throws in a row"
+
+msgid "objective.throw_simple_great.singular"
+msgstr "Make a Great Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_great.plural"
+msgstr "Make {%1} Great Throws"
+
+msgid "objective.throw_simple_great_chain.singular"
+msgstr "Make 1 Great Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_great_chain.plural"
+msgstr "Make {%1} Great Throws in a row"
+
+msgid "objective.throw_simple_excellent.singular"
+msgstr "Make an Excellent Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_excellent.plural"
+msgstr "Make {%1} Excellent Throws"
+
+msgid "objective.throw_simple_excellent_chain.singular"
+msgstr "Make 1 Excellent Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_simple_excellent_chain.plural"
+msgstr "Make {%1} Excellent Throws in a row"
+
+msgid "objective.throw_curve.singular"
+msgstr "Make a Curveball Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_curve.plural"
+msgstr "Make {%1} Curveball Throws"
+
+msgid "objective.throw_curve_chain.singular"
+msgstr "Make 1 Curveball Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_chain.plural"
+msgstr "Make {%1} Curveball Throws in a row"
+
+msgid "objective.throw_curve_nice.singular"
+msgstr "Make a Nice Curveball Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_nice.plural"
+msgstr "Make {%1} Nice Curveball Throws"
+
+msgid "objective.throw_curve_nice_chain.singular"
+msgstr "Make 1 Nice Curveball Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_nice_chain.plural"
+msgstr "Make {%1} Nice Curveball Throws in a row"
+
+msgid "objective.throw_curve_great.singular"
+msgstr "Make a Great Curveball Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_great.plural"
+msgstr "Make {%1} Great Curveball Throws"
+
+msgid "objective.throw_curve_great_chain.singular"
+msgstr "Make 1 Great Curveball Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_great_chain.plural"
+msgstr "Make {%1} Great Curveball Throws in a row"
+
+msgid "objective.throw_curve_excellent.singular"
+msgstr "Make an Excellent Curveball Throw"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_excellent.plural"
+msgstr "Make {%1} Excellent Curveball Throws"
+
+msgid "objective.throw_curve_excellent_chain.singular"
+msgstr "Make 1 Excellent Curveball Throw in a row"
+
+# %1 = Number of throws
+msgid "objective.throw_curve_excellent_chain.plural"
+msgstr "Make {%1} Excellent Curveball Throws in a row"
+
+msgid "objective.visit_poi.singular"
+msgstr "Spin a Pokéstop or Gym"
+
+# %1 = Number of POIs
+msgid "objective.visit_poi.plural"
+msgstr "Spin {%1} Pokéstops or Gyms"
+
+msgid "objective.new_poi.singular"
+msgstr "Spin a Pokéstop you haven't visited before"
+
+# %1 = Number of POIs
+msgid "objective.new_poi.plural"
+msgstr "Spin {%1} Pokéstops you haven't visited before"
+
+msgid "objective.visit_daily.singular"
+msgstr "Visit Pokéstops 1 day in a row"
+
+# %1 = Number of days in a row
+msgid "objective.visit_daily.plural"
+msgstr "Visit Pokéstops {%1} days in a row"
+
+msgid "objective.send_gift.singular"
+msgstr "Send a Gift to a friend"
+
+# %1 = Number of gifts to send
+msgid "objective.send_gift.plural"
+msgstr "Send {%1} Gifts to friends"
+
+msgid "objective.trade.singular"
+msgstr "Trade a Pokémon"
+
+# %1 = Number of specimen to trade
+msgid "objective.trade.plural"
+msgstr "Trade {%1} Pokémon"
+
+# Displayed when the research task objective of a Pokéstop is unknown.
+msgid "objective.unknown.singular"
+msgstr "Unknown objective"
+
diff --git a/includes/i18n/sv-SE/page_title.po b/includes/i18n/sv-SE/page_title.po
new file mode 100644
index 00000000..f46ef43f
--- /dev/null
+++ b/includes/i18n/sv-SE/page_title.po
@@ -0,0 +1,53 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/page_title.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "page_title.setup"
+msgstr "FreeField Setup"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+# %2 = Administration domain (e.g. "Users", "Webhooks")
+msgid "page_title.admin"
+msgstr "Admin » {%2} | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.main"
+msgstr "{%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.access_denied"
+msgstr "Access denied | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.main"
+msgstr "Login | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.failed"
+msgstr "Login failed | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.awaiting_approval"
+msgstr "Account awaiting approval | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.approve_user"
+msgstr "User approval request | {%1}"
+
+# %1 = Name of the site installation (e.g. "FreeField" or " FreeField")
+msgid "page_title.login.telegram"
+msgstr "Login » Telegram | {%1}"
+
diff --git a/includes/i18n/sv-SE/parameter.po b/includes/i18n/sv-SE/parameter.po
new file mode 100644
index 00000000..ae3266f2
--- /dev/null
+++ b/includes/i18n/sv-SE/parameter.po
@@ -0,0 +1,96 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/parameter.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the minimum level of a raid.
+msgid "parameter.min_tier.label"
+msgstr "Minimum level"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Win a level [placeholder] or higher raid"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.min_tier.placeholder"
+msgstr "[x]"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the minimum objective or
+# reward quantity (e.g. minimum number of Pokémon to catch).
+msgid "parameter.quantity.label"
+msgstr "Quantity"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch [placeholder] Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.quantity.placeholder"
+msgstr "[n]"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the catch/evolve/etc. species
+# requirements.
+msgid "parameter.species.label"
+msgstr "Species"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch a [placeholder]"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.species.placeholder"
+msgstr "[Species]"
+
+# This is a header displayed in a selection box when selecting a particular
+# species for a research objective. It lists commonly reported species.
+msgid "parameter.species.recent.label"
+msgstr "Recent species"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the catch/evolve/etc. type
+# requirements.
+msgid "parameter.type.label"
+msgstr "Type(s)"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Catch a [placeholder] Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.type.placeholder"
+msgstr "[Type]-type"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog when additional data must be specified for the selected
+# objective or reward. This label will display when an objective or reward that
+# requires it has been chosen. This label is for the item usage requirements
+# for encounters.
+msgid "parameter.encounter_item.label"
+msgstr "Item"
+
+# This is used in the objective and reward drop-down menus in the research
+# reporting dialog as placeholders in e.g. the following string:
+# "Use a [placeholder] to help catch Pokémon"
+# Please remember to include square brackets around the placeholder.
+msgid "parameter.encounter_item.placeholder"
+msgstr "[Item]"
+
diff --git a/includes/i18n/sv-SE/poi.po b/includes/i18n/sv-SE/poi.po
new file mode 100644
index 00000000..9631d2e9
--- /dev/null
+++ b/includes/i18n/sv-SE/poi.po
@@ -0,0 +1,199 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/poi.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+# %1 = Last updated date/time
+msgid "poi.last.time"
+msgstr "Updated {%1}"
+
+# %1 = Nickname of last user to update POI
+msgid "poi.last.user"
+msgstr "Updated by {%1}"
+
+msgid "poi.add.title"
+msgstr "Add Pokéstop"
+
+msgid "poi.add.name"
+msgstr "Pokéstop name"
+
+msgid "poi.add.latitude"
+msgstr "Latitude"
+
+msgid "poi.add.longitude"
+msgstr "Longitude"
+
+msgid "poi.add.submit"
+msgstr "Add Pokéstop"
+
+msgid "poi.add.processing"
+msgstr "Adding Pokéstop..."
+
+# %1 = Name of POI
+msgid "poi.add.success"
+msgstr "New Pokéstop \"{%1}\" was successfully added!"
+
+# %1 = Name of POI, %2 = Reason it failed
+msgid "poi.add.failed.message"
+msgstr "Failed to add new Pokéstop \"{%1}\": {%2}"
+
+# %1 = , %2 =
+msgid "poi.add.instructions"
+msgstr "Please click the map to add a new Pokéstop at that location ({%1}Cancel{%2})"
+
+msgid "poi.move.instructions"
+msgstr "Please click the map to select a new location for this Pokéstop ({%1}Cancel{%2})"
+
+msgid "poi.move.processing"
+msgstr "Moving Pokéstop..."
+
+msgid "poi.move.success"
+msgstr "Successfully moved Pokéstop!"
+
+# %1 = Reason it failed
+msgid "poi.move.failed.message"
+msgstr "Failed to move Pokéstop: {%1}"
+
+msgid "poi.rename.prompt"
+msgstr "Please enter a new name for the Pokéstop:"
+
+msgid "poi.rename.processing"
+msgstr "Renaming Pokéstop..."
+
+msgid "poi.rename.success"
+msgstr "Successfully renamed Pokéstop!"
+
+# %1 = Reason it failed
+msgid "poi.rename.failed.message"
+msgstr "Failed to rename Pokéstop: {%1}"
+
+msgid "poi.clear.confirm"
+msgstr "Are you sure that you want to erase the currently active research task from this Pokéstop?"
+
+msgid "poi.clear.processing"
+msgstr "Clearing research..."
+
+msgid "poi.clear.success"
+msgstr "Successfully cleared research data from Pokéstop!"
+
+# %1 = Reason it failed
+msgid "poi.clear.failed.message"
+msgstr "Failed to clear research data for Pokéstop: {%1}"
+
+msgid "poi.delete.confirm"
+msgstr "Are you sure that you want to remove this Pokéstop from the map?"
+
+msgid "poi.delete.processing"
+msgstr "Removing Pokéstop..."
+
+msgid "poi.delete.success"
+msgstr "Successfully removed Pokéstop!"
+
+# %1 = Reason it failed
+msgid "poi.delete.failed.message"
+msgstr "Failed to remove Pokéstop: {%1}"
+
+msgid "poi.update.title"
+msgstr "Report research"
+
+msgid "poi.update.name"
+msgstr "Pokéstop name"
+
+msgid "poi.update.objective"
+msgstr "Objective"
+
+msgid "poi.update.reward"
+msgstr "Reward"
+
+msgid "poi.update.submit"
+msgstr "Report"
+
+msgid "poi.update.processing"
+msgstr "Reporting research..."
+
+msgid "poi.update.success"
+msgstr "Successfully reported field research!"
+
+# %1 = Reason it failed
+msgid "poi.update.failed.message"
+msgstr "Failed to report field research: {%1}"
+
+msgid "poi.search.placeholder"
+msgstr "Search for Pokéstops..."
+
+# %1 = Distance in kilometers
+msgid "poi.search.distance"
+msgstr "{%1} km"
+
+msgid "poi.filter.title"
+msgstr "Filter Pokéstops"
+
+msgid "poi.filter.mode.title"
+msgstr "Filter mode:"
+
+msgid "poi.filter.mode.only"
+msgstr "Show only Pokéstops matching the specified objective and reward"
+
+msgid "poi.filter.mode.except"
+msgstr "Show all Pokéstops except any matching the specified objective and reward"
+
+msgid "poi.filter.mode.unknown"
+msgstr "Show Pokéstops without reported research only"
+
+msgid "poi.filter.objective.title"
+msgstr "Objective:"
+
+msgid "poi.filter.objective.any"
+msgstr "Any objective"
+
+msgid "poi.filter.reward.title"
+msgstr "Reward:"
+
+msgid "poi.filter.reward.any"
+msgstr "Any reward"
+
+msgid "poi.filter.submit"
+msgstr "Apply filter"
+
+msgid "poi.filter.reset"
+msgstr "Reset filters"
+
+# %1 = Reason it failed
+msgid "poi.list.failed.message"
+msgstr "Failed to list Pokéstops: {%1}"
+
+# %1 = Research objective (e.g. "Make 3 Great Throws")
+# %2 = Research reward (e.g. "1 Max Revive")
+msgid "poi.objective_text"
+msgstr "{%1} for {%2}"
+
+msgid "poi.report_research"
+msgstr "Report field research"
+
+msgid "poi.move"
+msgstr "Move"
+
+msgid "poi.rename"
+msgstr "Rename"
+
+msgid "poi.clear"
+msgstr "Clear research"
+
+msgid "poi.delete"
+msgstr "Delete"
+
+msgid "poi.directions"
+msgstr "Directions"
+
diff --git a/includes/i18n/sv-SE/release_type.po b/includes/i18n/sv-SE/release_type.po
new file mode 100644
index 00000000..20738fa4
--- /dev/null
+++ b/includes/i18n/sv-SE/release_type.po
@@ -0,0 +1,47 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/release_type.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "release_type.stable.name"
+msgstr "Stable release"
+
+msgid "release_type.stable.desc"
+msgstr "This release is generally considered stable for production use."
+
+msgid "release_type.rc.name"
+msgstr "Release candidate"
+
+msgid "release_type.rc.desc"
+msgstr "This release is mostly considered stable. No more functionality will be added before stable release at this point. The release has incomplete documentation and may contain minor bugs."
+
+msgid "release_type.beta.name"
+msgstr "Beta release (unstable)"
+
+msgid "release_type.beta.desc"
+msgstr "This release is considered unstable. Minor functionality may be added before it becomes a release candidate. The release likely contains bugs. Documentation is minimal or non-existent for new features."
+
+msgid "release_type.alpha.name"
+msgstr "Alpha release (very unstable)"
+
+msgid "release_type.alpha.desc"
+msgstr "This release is considered very unstable. Major functionality may be added before stable release. The release very likely contains bugs, and may break your FreeField installation. There is no documentation on new features."
+
+msgid "release_type.dev.name"
+msgstr "Bleeding edge (extremely unstable)"
+
+msgid "release_type.dev.desc"
+msgstr "This release is considered extremely unstable and incomplete. Major functionality will likely be added before stable release. This release almost certainly contains bugs, and may break your FreeField installation beyond repair. Due to the instability associated with bleeding edge releases, these releases are rarely published."
+
diff --git a/includes/i18n/sv-SE/reward.po b/includes/i18n/sv-SE/reward.po
new file mode 100644
index 00000000..9317eefe
--- /dev/null
+++ b/includes/i18n/sv-SE/reward.po
@@ -0,0 +1,278 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/reward.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "reward.poke_ball.general"
+msgstr "Poké Ball"
+
+msgid "reward.poke_ball.singular"
+msgstr "1 Poké Ball"
+
+# %1 = Amount/quantity
+msgid "reward.poke_ball.plural"
+msgstr "{%1} Poké Balls"
+
+msgid "reward.great_ball.general"
+msgstr "Great Ball"
+
+msgid "reward.great_ball.singular"
+msgstr "1 Great Ball"
+
+# %1 = Amount/quantity
+msgid "reward.great_ball.plural"
+msgstr "{%1} Great Balls"
+
+msgid "reward.ultra_ball.general"
+msgstr "Ultra Ball"
+
+msgid "reward.ultra_ball.singular"
+msgstr "1 Ultra Ball"
+
+# %1 = Amount/quantity
+msgid "reward.ultra_ball.plural"
+msgstr "{%1} Ultra Balls"
+
+msgid "reward.razz_berry.general"
+msgstr "Razz Berry"
+
+msgid "reward.razz_berry.singular"
+msgstr "1 Razz Berry"
+
+# %1 = Amount/quantity
+msgid "reward.razz_berry.plural"
+msgstr "{%1} Razz Berries"
+
+msgid "reward.nanab_berry.general"
+msgstr "Nanab Berry"
+
+msgid "reward.nanab_berry.singular"
+msgstr "1 Nanab Berry"
+
+# %1 = Amount/quantity
+msgid "reward.nanab_berry.plural"
+msgstr "{%1} Nanab Berries"
+
+msgid "reward.pinap_berry.general"
+msgstr "Pinap Berry"
+
+msgid "reward.pinap_berry.singular"
+msgstr "1 Pinap Berry"
+
+# %1 = Amount/quantity
+msgid "reward.pinap_berry.plural"
+msgstr "{%1} Pinap Berries"
+
+msgid "reward.golden_razz_berry.general"
+msgstr "Golden Razz Berry"
+
+msgid "reward.golden_razz_berry.singular"
+msgstr "1 Golden Razz Berry"
+
+# %1 = Amount/quantity
+msgid "reward.golden_razz_berry.plural"
+msgstr "{%1} Golden Razz Berries"
+
+msgid "reward.silver_pinap_berry.general"
+msgstr "Silver Pinap Berry"
+
+msgid "reward.silver_pinap_berry.singular"
+msgstr "1 Silver Pinap Berry"
+
+# %1 = Amount/quantity
+msgid "reward.silver_pinap_berry.plural"
+msgstr "{%1} Silver Pinap Berries"
+
+msgid "reward.potion.general"
+msgstr "Potion"
+
+msgid "reward.potion.singular"
+msgstr "1 Potion"
+
+# %1 = Amount/quantity
+msgid "reward.potion.plural"
+msgstr "{%1} Potions"
+
+msgid "reward.super_potion.general"
+msgstr "Super Potion"
+
+msgid "reward.super_potion.singular"
+msgstr "1 Super Potion"
+
+# %1 = Amount/quantity
+msgid "reward.super_potion.plural"
+msgstr "{%1} Super Potions"
+
+msgid "reward.hyper_potion.general"
+msgstr "Hyper Potion"
+
+msgid "reward.hyper_potion.singular"
+msgstr "1 Hyper Potion"
+
+# %1 = Amount/quantity
+msgid "reward.hyper_potion.plural"
+msgstr "{%1} Hyper Potions"
+
+msgid "reward.max_potion.general"
+msgstr "Max Potion"
+
+msgid "reward.max_potion.singular"
+msgstr "1 Max Potion"
+
+# %1 = Amount/quantity
+msgid "reward.max_potion.plural"
+msgstr "{%1} Max Potions"
+
+msgid "reward.revive.general"
+msgstr "Revive"
+
+msgid "reward.revive.singular"
+msgstr "1 Revive"
+
+# %1 = Amount/quantity
+msgid "reward.revive.plural"
+msgstr "{%1} Revives"
+
+msgid "reward.max_revive.general"
+msgstr "Max Revive"
+
+msgid "reward.max_revive.singular"
+msgstr "1 Max Revive"
+
+# %1 = Amount/quantity
+msgid "reward.max_revive.plural"
+msgstr "{%1} Max Revives"
+
+msgid "reward.sun_stone.general"
+msgstr "Sun Stone"
+
+msgid "reward.sun_stone.singular"
+msgstr "1 Sun Stone"
+
+# %1 = Amount/quantity
+msgid "reward.sun_stone.plural"
+msgstr "{%1} Sun Stones"
+
+msgid "reward.kings_rock.general"
+msgstr "King's Rock"
+
+msgid "reward.kings_rock.singular"
+msgstr "1 King's Rock"
+
+# %1 = Amount/quantity
+msgid "reward.kings_rock.plural"
+msgstr "{%1} Kings' Rocks"
+
+msgid "reward.metal_coat.general"
+msgstr "Metal Coat"
+
+msgid "reward.metal_coat.singular"
+msgstr "1 Metal Coat"
+
+# %1 = Amount/quantity
+msgid "reward.metal_coat.plural"
+msgstr "{%1} Metal Coats"
+
+msgid "reward.dragon_scale.general"
+msgstr "Dragon Scale"
+
+msgid "reward.dragon_scale.singular"
+msgstr "1 Dragon Scale"
+
+# %1 = Amount/quantity
+msgid "reward.dragon_scale.plural"
+msgstr "{%1} Dragon Scales"
+
+msgid "reward.up_grade.general"
+msgstr "Up-Grade"
+
+msgid "reward.up_grade.singular"
+msgstr "1 Up-Grade"
+
+# %1 = Amount/quantity
+msgid "reward.up_grade.plural"
+msgstr "{%1} Up-Grades"
+
+msgid "reward.sinnoh_stone.general"
+msgstr "Sinnoh Stone"
+
+msgid "reward.sinnoh_stone.singular"
+msgstr "1 Sinnoh Stone"
+
+# %1 = Amount/quantity
+msgid "reward.sinnoh_stone.plural"
+msgstr "{%1} Sinnoh Stones"
+
+msgid "reward.fast_tm.general"
+msgstr "Fast TM"
+
+msgid "reward.fast_tm.singular"
+msgstr "1 Fast TM"
+
+# %1 = Amount/quantity
+msgid "reward.fast_tm.plural"
+msgstr "{%1} Fast TMs"
+
+msgid "reward.charge_tm.general"
+msgstr "Charge TM"
+
+msgid "reward.charge_tm.singular"
+msgstr "1 Charge TM"
+
+# %1 = Amount/quantity
+msgid "reward.charge_tm.plural"
+msgstr "{%1} Charge TMs"
+
+msgid "reward.stardust.general"
+msgstr "Stardust"
+
+msgid "reward.stardust.singular"
+msgstr "1 Stardust"
+
+# %1 = Amount/quantity
+msgid "reward.stardust.plural"
+msgstr "{%1} Stardust"
+
+msgid "reward.rare_candy.general"
+msgstr "Rare Candy"
+
+msgid "reward.rare_candy.singular"
+msgstr "1 Rare Candy"
+
+# %1 = Amount/quantity
+msgid "reward.rare_candy.plural"
+msgstr "{%1} Rare Candies"
+
+msgid "reward.encounter.general"
+msgstr "Pokémon encounter"
+
+msgid "reward.encounter.singular"
+msgstr "Pokémon encounter"
+
+msgid "reward.encounter.plural"
+msgstr "Pokémon encounters"
+
+# %1 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "reward.encounter_specific.singular"
+msgstr "{%1} encounter"
+
+# %1 = Name of a species ("Pikachu", "Charizard", etc.)
+msgid "reward.encounter_specific.plural"
+msgstr "{%1} encounters"
+
+# Displayed when the research task reward from a Pokéstop is unknown.
+msgid "reward.unknown.singular"
+msgstr "unknown reward"
+
diff --git a/includes/i18n/sv-SE/setting.po b/includes/i18n/sv-SE/setting.po
new file mode 100644
index 00000000..e87841a6
--- /dev/null
+++ b/includes/i18n/sv-SE/setting.po
@@ -0,0 +1,1218 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/setting.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "setting.site.uri.name"
+msgstr "Installation URI"
+
+msgid "setting.site.uri.desc"
+msgstr "The base location of the FreeField installation."
+
+msgid "setting.site.name.name"
+msgstr "Site name"
+
+msgid "setting.site.name.desc"
+msgstr "The name of the FreeField instance (e.g. '[City Name] FreeField')"
+
+msgid "setting.site.menu_header.name"
+msgstr "Sidebar header"
+
+msgid "setting.site.menu_header.desc"
+msgstr "The text displayed at the top of the menu sidebar."
+
+msgid "setting.site.menu_image.name"
+msgstr "Sidebar image"
+
+msgid "setting.site.menu_image.desc"
+msgstr "An image displayed at the top of the sidebar instead of the header text above. *.png, *.gif, *.jpg, and *.svg files are allowed. Must not exceed 128 KiB."
+
+msgid "setting.site.header_style.name"
+msgstr "Sidebar header style"
+
+msgid "setting.site.header_style.desc"
+msgstr "Choose whether to display text or an image in the sidebar."
+
+msgid "setting.site.header_style.option.text"
+msgstr "Show header text"
+
+msgid "setting.site.header_style.option.image"
+msgstr "Show header image (with background color)"
+
+msgid "setting.site.header_style.option.image_plain"
+msgstr "Show header image (without background color)"
+
+msgid "setting.motd.display_mode.name"
+msgstr "Display mode"
+
+msgid "setting.motd.display_mode.desc"
+msgstr "Determines how the Message of the Day is displayed."
+
+msgid "setting.motd.display_mode.option.forced"
+msgstr "Always display the Message of the Day on every page load"
+
+msgid "setting.motd.display_mode.option.always"
+msgstr "Always display by default, but allow users to dismiss it until it is next changed"
+
+msgid "setting.motd.display_mode.option.on_change"
+msgstr "Display once if the message is changed, then hide it for subsequent visits"
+
+msgid "setting.motd.display_mode.option.on_request"
+msgstr "Display only if the user manually requests to view the message"
+
+msgid "setting.motd.display_mode.option.never"
+msgstr "Completely disable the Message of the Day"
+
+msgid "setting.motd.title.name"
+msgstr "Custom message title"
+
+msgid "setting.motd.title.desc"
+msgstr "The title on the Message of the Day popup box. Defaults to \"Message of the Day\" if left blank."
+
+msgid "setting.motd.content.name"
+msgstr "Message content"
+
+msgid "setting.motd.content.desc"
+msgstr "A message displayed to all users in a popup box every time FreeField is opened. Markdown formatting accepted."
+
+msgid "setting.spiders.robots_policy.name"
+msgstr "Robots policy"
+
+msgid "setting.spiders.robots_policy.desc"
+msgstr "Declares how robots (such as search engines and other web scrapers) may crawl and index this site."
+
+msgid "setting.spiders.robots_policy.option.all"
+msgstr "Allow all indexation and crawling (all)"
+
+msgid "setting.spiders.robots_policy.option.nofollow"
+msgstr "Allow indexation, but do not follow page links (nofollow)"
+
+msgid "setting.spiders.robots_policy.option.noindex"
+msgstr "Deny indexation, but allow following page links (noindex)"
+
+msgid "setting.spiders.robots_policy.option.noindex_nofollow"
+msgstr "Deny all indexation and crawling (noindex,nofollow)"
+
+msgid "setting.database.type.name"
+msgstr "Database type"
+
+msgid "setting.database.type.desc"
+msgstr "The type of connection used to connect to the database."
+
+msgid "setting.database.type.option.mysql"
+msgstr "MySQL"
+
+msgid "setting.database.type.option.pgsql"
+msgstr "PostgreSQL (experimental)"
+
+msgid "setting.database.type.option.sqlite"
+msgstr "SQLite 3 (experimental)"
+
+msgid "setting.database.type.option.sqlite2"
+msgstr "SQLite 2 (experimental)"
+
+msgid "setting.database.type.option.sqlsrv"
+msgstr "Microsoft SQL Server / SQL Azure (experimental)"
+
+msgid "setting.database.type.option.4D"
+msgstr "4D (experimental)"
+
+msgid "setting.database.type.option.oci"
+msgstr "OCI / Oracle Instant Client (experimental)"
+
+msgid "setting.database.type.option.cubrid"
+msgstr "Cubrid (experimental)"
+
+msgid "setting.database.type.option.sybase"
+msgstr "Sybase ct-lib (experimental)"
+
+msgid "setting.database.type.option.mssql"
+msgstr "Microsoft SQL Server (via dblib) (experimental)"
+
+msgid "setting.database.type.option.dblib"
+msgstr "FreeTDS (experimental)"
+
+msgid "setting.database.host.name"
+msgstr "Hostname"
+
+msgid "setting.database.host.desc"
+msgstr "The hostname or IP address of the database."
+
+msgid "setting.database.port.name"
+msgstr "Port (-1 = default)"
+
+msgid "setting.database.port.desc"
+msgstr "The port used to connect to the database. Set to -1 for default port."
+
+msgid "setting.database.username.name"
+msgstr "Username"
+
+msgid "setting.database.username.desc"
+msgstr "The username to login to the database server."
+
+msgid "setting.database.password.name"
+msgstr "Password"
+
+msgid "setting.database.password.desc"
+msgstr "The password to login to the database server."
+
+msgid "setting.database.database.name"
+msgstr "Database"
+
+msgid "setting.database.database.desc"
+msgstr "The name of the database FreeField should write data to."
+
+msgid "setting.database.table_prefix.name"
+msgstr "Table prefix"
+
+msgid "setting.database.table_prefix.desc"
+msgstr "A prefix used for all tables used by FreeField, to avoid conflicts with other tables."
+
+msgid "setting.permissions.default_level.name"
+msgstr "Default user group"
+
+msgid "setting.permissions.default_level.desc"
+msgstr "The default permissions level to assign all newly registered users."
+
+msgid "setting.permissions.level.self_manage.nickname.name"
+msgstr "Change own nickname"
+
+msgid "setting.permissions.level.self_manage.nickname.desc"
+msgstr "Allows users of this level and higher to change their own nicknames."
+
+msgid "setting.permissions.level.access.name"
+msgstr "View map"
+
+msgid "setting.permissions.level.access.desc"
+msgstr "Allows users to view the FreeField map and list of Pokéstops."
+
+msgid "setting.permissions.level.find_reporter.name"
+msgstr "Identify research reporters"
+
+msgid "setting.permissions.level.find_reporter.desc"
+msgstr "Shows users who last submitted research on each Pokéstop."
+
+msgid "setting.permissions.level.report_research.name"
+msgstr "Report field research"
+
+msgid "setting.permissions.level.report_research.desc"
+msgstr "Allows users to report field research on Pokéstops whose current field research objective is unknown."
+
+msgid "setting.permissions.level.overwrite_research.name"
+msgstr "Overwrite field research"
+
+msgid "setting.permissions.level.overwrite_research.desc"
+msgstr "Allows users to report field research on all Pokéstops, even if another user has previously submitted a research objective on the same day. Also requires the \"Report field research\" permission."
+
+msgid "setting.permissions.level.submit_poi.name"
+msgstr "Submit Pokéstops"
+
+msgid "setting.permissions.level.submit_poi.desc"
+msgstr "Allows users to submit new Pokéstops to the map."
+
+msgid "setting.permissions.level.personalization.icons.name"
+msgstr "Customize markers"
+
+msgid "setting.permissions.level.personalization.icons.desc"
+msgstr "Allows users to select their own map marker set instead of the default for their own account."
+
+msgid "setting.permissions.level.personalization.species.name"
+msgstr "Customize species icons"
+
+msgid "setting.permissions.level.personalization.species.desc"
+msgstr "Allows users to select their own species icon set instead of the default for their own account."
+
+msgid "setting.permissions.level.admin.main.general.name"
+msgstr "Manage site settings"
+
+msgid "setting.permissions.level.admin.main.general.desc"
+msgstr "Allows users to change the site database and installation settings."
+
+msgid "setting.permissions.level.admin.main.section.access.name"
+msgstr "Manage access settings"
+
+msgid "setting.permissions.level.admin.main.section.access.desc"
+msgstr "Allows users to change the access parameters, such as the URL, of the site."
+
+msgid "setting.permissions.level.admin.main.section.instance.name"
+msgstr "Manage instance options"
+
+msgid "setting.permissions.level.admin.main.section.instance.desc"
+msgstr "Allows users to change this FreeField instance's core appearance options, such as the name of the site."
+
+msgid "setting.permissions.level.admin.main.section.motd.name"
+msgstr "Manage MotD"
+
+msgid "setting.permissions.level.admin.main.section.motd.desc"
+msgstr "Allows users to change and manage the Message of the Day for this FreeField instance."
+
+msgid "setting.permissions.level.admin.main.section.spiders.name"
+msgstr "Manage crawling settings"
+
+msgid "setting.permissions.level.admin.main.section.spiders.desc"
+msgstr "Allows users to change the crawling settings for web spiders."
+
+msgid "setting.permissions.level.admin.main.section.database.name"
+msgstr "Manage database settings"
+
+msgid "setting.permissions.level.admin.main.section.database.desc"
+msgstr "Allows users to change the database settings."
+
+msgid "setting.permissions.level.admin.users.general.name"
+msgstr "Manage users"
+
+msgid "setting.permissions.level.admin.users.general.desc"
+msgstr "Allows users to approve, reject, manage, and delete other users's accounts."
+
+msgid "setting.permissions.level.admin.groups.general.name"
+msgstr "Manage groups"
+
+msgid "setting.permissions.level.admin.groups.general.desc"
+msgstr "Allows users to add, remove, and manage user groups."
+
+msgid "setting.permissions.level.admin.users.groups.name"
+msgstr "Manage group membership"
+
+msgid "setting.permissions.level.admin.users.groups.desc"
+msgstr "Allows users to manage users' memberships in groups. Also requires the \"Manage users\" permission."
+
+msgid "setting.permissions.level.admin.groups.self_manage.name"
+msgstr "Manage own group"
+
+msgid "setting.permissions.level.admin.groups.self_manage.desc"
+msgstr "Allows users to assign and remove other users from, and manage the permissions of their own group. By default, users with group membership permissions can only assign users to and manage groups below themselves. This permission is a dangerous permission to grant! Users with this permission can appoint and delete other users of the same rank as themselves. It is highly recommended to leave this at the default unless there is an extremely good reason to change it. Also requires the \"Manage group membership\" permission."
+
+msgid "setting.permissions.level.admin.pois.general.name"
+msgstr "Manage Pokéstops"
+
+msgid "setting.permissions.level.admin.pois.general.desc"
+msgstr "Allow users to manage and delete user-submitted Pokéstops."
+
+msgid "setting.permissions.level.admin.pois.import.name"
+msgstr "Import and export data"
+
+msgid "setting.permissions.level.admin.pois.import.desc"
+msgstr "Allow users to import and export Pokéstops."
+
+msgid "setting.permissions.level.admin.perms.general.name"
+msgstr "Manage permissions"
+
+msgid "setting.permissions.level.admin.perms.general.desc"
+msgstr "Allows users to change the permissions settings on this page."
+
+msgid "setting.permissions.level.admin.perms.section.default.name"
+msgstr "Set default group"
+
+msgid "setting.permissions.level.admin.perms.section.default.desc"
+msgstr "Allows users to change the default user group for newly registered members."
+
+msgid "setting.permissions.level.admin.perms.section.self_manage.name"
+msgstr "Grant self-management permissions"
+
+msgid "setting.permissions.level.admin.perms.section.self_manage.desc"
+msgstr "Allows users to manage permissions relating to account self-management, such as granting users the right to change their own nicknames, on this page."
+
+msgid "setting.permissions.level.admin.perms.section.map_access.name"
+msgstr "Manage map access"
+
+msgid "setting.permissions.level.admin.perms.section.map_access.desc"
+msgstr "Allows users to manage map access restrictions."
+
+msgid "setting.permissions.level.admin.perms.section.personalization.name"
+msgstr "Manage personalization restrictions"
+
+msgid "setting.permissions.level.admin.perms.section.personalization.desc"
+msgstr "Allows users to manage map personalization restrictions, such as restrictions on which icon sets can be used."
+
+msgid "setting.permissions.level.admin.perms.section.admin.name"
+msgstr "Manage administrative permissions"
+
+msgid "setting.permissions.level.admin.perms.section.admin.desc"
+msgstr "Allows users to manage administrative permissions (such as this one)."
+
+msgid "setting.permissions.level.admin.security.general.name"
+msgstr "Manage security settings"
+
+msgid "setting.permissions.level.admin.security.general.desc"
+msgstr "Allows users to change the security settings for the site."
+
+msgid "setting.permissions.level.admin.security.section.user_creation.name"
+msgstr "Configure user approval"
+
+msgid "setting.permissions.level.admin.security.section.user_creation.desc"
+msgstr "Allows users to change settings related to user account creation."
+
+msgid "setting.permissions.level.admin.security.section.sessions.name"
+msgstr "Configure session parameters"
+
+msgid "setting.permissions.level.admin.security.section.sessions.desc"
+msgstr "Allows users to change session security settings."
+
+msgid "setting.permissions.level.admin.security.section.outbound.name"
+msgstr "Configure outbound requests security"
+
+msgid "setting.permissions.level.admin.security.section.outbound.desc"
+msgstr "Allows users to change security settings for outbound HTTP requests."
+
+msgid "setting.permissions.level.admin.security.section.same_origin.name"
+msgstr "Manage same-origin policies"
+
+msgid "setting.permissions.level.admin.security.section.same_origin.desc"
+msgstr "Allows users to change same-origin policy settings."
+
+msgid "setting.permissions.level.admin.auth.general.name"
+msgstr "Manage authentication"
+
+msgid "setting.permissions.level.admin.auth.general.desc"
+msgstr "Allows users to add, set up, enable, and disable various authentication providers for user sign-in."
+
+msgid "setting.permissions.level.admin.auth.section.discord.name"
+msgstr "Discord authentication"
+
+msgid "setting.permissions.level.admin.auth.section.discord.desc"
+msgstr "Allows users to change authentication settings for Discord."
+
+msgid "setting.permissions.level.admin.auth.section.telegram.name"
+msgstr "Telegram authentication"
+
+msgid "setting.permissions.level.admin.auth.section.telegram.desc"
+msgstr "Allows users to change authentication settings for Telegram."
+
+msgid "setting.permissions.level.admin.auth.section.reddit.name"
+msgstr "Reddit authentication"
+
+msgid "setting.permissions.level.admin.auth.section.reddit.desc"
+msgstr "Allows users to change authentication settings for Reddit."
+
+msgid "setting.permissions.level.admin.auth.section.facebook.name"
+msgstr "Facebook authentication"
+
+msgid "setting.permissions.level.admin.auth.section.facebook.desc"
+msgstr "Allows users to change authentication settings for Facebook."
+
+msgid "setting.permissions.level.admin.auth.section.line.name"
+msgstr "LINE authentication"
+
+msgid "setting.permissions.level.admin.auth.section.line.desc"
+msgstr "Allows users to change authentication settings for LINE."
+
+msgid "setting.permissions.level.admin.auth.section.groupme.name"
+msgstr "GroupMe authentication"
+
+msgid "setting.permissions.level.admin.auth.section.groupme.desc"
+msgstr "Allows users to change authentication settings for GroupMe."
+
+msgid "setting.permissions.level.admin.mobile.general.name"
+msgstr "Manage mobile settings"
+
+msgid "setting.permissions.level.admin.mobile.general.desc"
+msgstr "Allows users to manage settings for the mobile device representation of this FreeField instance."
+
+msgid "setting.permissions.level.admin.mobile.section.pwa.name"
+msgstr "Manage PWA settings"
+
+msgid "setting.permissions.level.admin.mobile.section.pwa.desc"
+msgstr "Allows users to modify the Progressive Web App manifest for mobile devices."
+
+msgid "setting.permissions.level.admin.themes.general.name"
+msgstr "Manage default appearance"
+
+msgid "setting.permissions.level.admin.themes.general.desc"
+msgstr "Allows users to manage default site-wide appearance."
+
+msgid "setting.permissions.level.admin.themes.section.meta.name"
+msgstr "Manage metadata"
+
+msgid "setting.permissions.level.admin.themes.section.meta.desc"
+msgstr "Allows users to change page metadata theming, such as the favicon and the theme color for mobile browsers."
+
+msgid "setting.permissions.level.admin.themes.section.color.name"
+msgstr "Manage themes"
+
+msgid "setting.permissions.level.admin.themes.section.color.desc"
+msgstr "Allows users to change the default map and page color themes and whether or not users are allowed to override those defaults."
+
+msgid "setting.permissions.level.admin.themes.section.icons.name"
+msgstr "Manage map markers"
+
+msgid "setting.permissions.level.admin.themes.section.icons.desc"
+msgstr "Allows users to change the default map marker set and whether or not users are allowed to override that default."
+
+msgid "setting.permissions.level.admin.map.general.name"
+msgstr "Manage map settings"
+
+msgid "setting.permissions.level.admin.map.general.desc"
+msgstr "Allows users to manage map providers and default settings for the map."
+
+msgid "setting.permissions.level.admin.map.section.provider.name"
+msgstr "Change map provider"
+
+msgid "setting.permissions.level.admin.map.section.provider.desc"
+msgstr "Allows users to change and configure which map provider this FreeField instance uses."
+
+msgid "setting.permissions.level.admin.map.section.default.name"
+msgstr "Change map defaults"
+
+msgid "setting.permissions.level.admin.map.section.default.desc"
+msgstr "Allows users to change map defaults, such as default coordinates and zoom level for first-time visitors."
+
+msgid "setting.permissions.level.admin.map.section.updates.name"
+msgstr "Manage client updates"
+
+msgid "setting.permissions.level.admin.map.section.updates.desc"
+msgstr "Allows users to change the interval at which each FreeField client requests an updated list of research tasks for all Pokéstops."
+
+msgid "setting.permissions.level.admin.map.section.geofence.name"
+msgstr "Manage master geofence"
+
+msgid "setting.permissions.level.admin.map.section.geofence.desc"
+msgstr "Allows users to change the geofence and associated behavior for submission and display of Pokéstops."
+
+msgid "setting.permissions.level.admin.fences.general.name"
+msgstr "Manage geofences"
+
+msgid "setting.permissions.level.admin.fences.general.desc"
+msgstr "Allows users to manage geofences."
+
+msgid "setting.permissions.level.admin.hooks.general.name"
+msgstr "Manage webhooks"
+
+msgid "setting.permissions.level.admin.hooks.general.desc"
+msgstr "Allows users to manage webhook integrations."
+
+msgid "setting.permissions.level.admin.api.general.name"
+msgstr "Manage API access"
+
+msgid "setting.permissions.level.admin.api.general.desc"
+msgstr "Allows users to set up and manage API clients that can interface with FreeField."
+
+msgid "setting.permissions.level.admin.updates.general.name"
+msgstr "Install updates"
+
+msgid "setting.permissions.level.admin.updates.general.desc"
+msgstr "Allows users to update the FreeField instance."
+
+msgid "setting.security.approval.require.name"
+msgstr "Require manual approval"
+
+msgid "setting.security.approval.require.desc"
+msgstr "If this is enabled, administrators must approve each created account before the account can be used to access FreeField."
+
+msgid "setting.security.approval.require.label"
+msgstr "Manually verify new user accounts"
+
+msgid "setting.security.approval.by_qr.name"
+msgstr "Present approval QR codes"
+
+msgid "setting.security.approval.by_qr.desc"
+msgstr "If this is enabled, users awaiting approval will be presented with a QR code that can be scanned by an administrator. Scanning the code will allow the administrator to approve or reject the user very quickly compared to finding the user in the list of registered users and approving them there. This function requires the GD extension to be loaded in PHP."
+
+msgid "setting.security.approval.by_qr.label"
+msgstr "Generate QR codes for quick administrative approval"
+
+msgid "setting.auth.session_length.name"
+msgstr "Session length"
+
+msgid "setting.auth.session_length.desc"
+msgstr "How long a user should stay logged in when they authenticate."
+
+msgid "setting.auth.session_length.option.86400"
+msgstr "1 day"
+
+msgid "setting.auth.session_length.option.604800"
+msgstr "7 days"
+
+msgid "setting.auth.session_length.option.2592000"
+msgstr "30 days"
+
+msgid "setting.auth.session_length.option.7776000"
+msgstr "90 days"
+
+msgid "setting.auth.session_length.option.15811200"
+msgstr "6 months"
+
+msgid "setting.auth.session_length.option.31536000"
+msgstr "1 year"
+
+msgid "setting.auth.session_length.option.63072000"
+msgstr "2 years"
+
+msgid "setting.auth.session_length.option.157766400"
+msgstr "5 years"
+
+msgid "setting.auth.session_length.option.315619200"
+msgstr "10 years"
+
+msgid "setting.security.validate_ua.name"
+msgstr "User-agent validation"
+
+msgid "setting.security.validate_ua.desc"
+msgstr "Restricts each login session to the browser it was created from. It is recommended to keep this enabled to prevent session hijacking, as usage of a session in a different browser than the one it was created from is almost always malicious. Setting this to Strict will log out the user if their browser receives an update, and does not improve security much beyond Lenient, and is thus not recommended."
+
+msgid "setting.security.validate_ua.option.no"
+msgstr "Disabled"
+
+msgid "setting.security.validate_ua.option.lenient"
+msgstr "Lenient (ignores browser version)"
+
+msgid "setting.security.validate_ua.option.strict"
+msgstr "Strict (enforces browser version)"
+
+msgid "setting.security.validate_lang.name"
+msgstr "Browser language validation"
+
+msgid "setting.security.validate_lang.desc"
+msgstr "Requires each login session to maintain the same set of browser languages every time it is used. This will invalidate a user's session if they change their browser or device languages. Enabling this helps against session hijacking where the malicious actor uses the same user-agent, but has configured their browser for a different set of accepted languages, such as if they live in a different country."
+
+msgid "setting.security.validate_lang.label"
+msgstr "Enforce browser language validation"
+
+msgid "setting.security.selector_canary.name"
+msgstr "Session hijack canary"
+
+msgid "setting.security.selector_canary.desc"
+msgstr "The session hijack canary is triggered when any of the above validation requirements fail for a user. While this could be caused by a session hijack, it may also be caused for completely legitimate reasons, such as a browser update causing strict user-agent validation to fail. Enabling the canary will cause the user to be signed out of FreeField on all of their devices if validation fails for one of them. In practice, this means that if an attacker obtains the user's session cookie, if they have e.g. the wrong user-agent or language on their browser, they will not be able to sign in with that cookie later even if they were to guess the correct user-agent or language because the cookie will be permanently invalidated."
+
+msgid "setting.security.selector_canary.label"
+msgstr "Require global user re-authentication upon session validation failures"
+
+msgid "setting.security.curl.verify_certificates.name"
+msgstr "Certificate validation"
+
+msgid "setting.security.curl.verify_certificates.desc"
+msgstr "Disabling certificate validation may resolve issues such as webhooks not working, but eliminates protection against man-in-the-middle attacks when performing outbound requests."
+
+msgid "setting.security.curl.verify_certificates.label"
+msgstr "Verify SSL/TLS certificates for outbound requests"
+
+msgid "setting.security.curl.cacert_path.name"
+msgstr "Certificates (cacert.pem) file"
+
+msgid "setting.security.curl.cacert_path.desc"
+msgstr "The path to the location of the certificate authority file on the server, for verifying outbound HTTPS connections."
+
+msgid "setting.security.frame_options.name"
+msgstr "Frame options"
+
+msgid "setting.security.frame_options.desc"
+msgstr "This setting declares the framing policy of this FreeField instance. Allowing framing means that other sites can insert this site as part of their own using iframes or framesets. It is recommended to leave this at the default \"deny\" setting unless you have a good reason for enabling it."
+
+msgid "setting.security.frame_options.option.allow"
+msgstr "Allow this site to be inserted in frames on all websites"
+
+msgid "setting.security.frame_options.option.sameorigin"
+msgstr "Allow framing only from the same origin as this site"
+
+msgid "setting.security.frame_options.option.deny"
+msgstr "Do not allow this site to be framed anywhere"
+
+msgid "setting.auth.provider.discord.enabled.name"
+msgstr "Allow Discord authentication"
+
+msgid "setting.auth.provider.discord.enabled.desc"
+msgstr "Enables usage of Discord for user authentication."
+
+msgid "setting.auth.provider.discord.enabled.label"
+msgstr "Enable Discord authentication"
+
+msgid "setting.auth.provider.discord.client_id.name"
+msgstr "Client ID"
+
+msgid "setting.auth.provider.discord.client_id.desc"
+msgstr "The client ID of your Discord API application."
+
+msgid "setting.auth.provider.discord.client_secret.name"
+msgstr "Client secret"
+
+msgid "setting.auth.provider.discord.client_secret.desc"
+msgstr "The client secret of your Discord API application."
+
+msgid "setting.auth.provider.telegram.enabled.name"
+msgstr "Allow Telegram authentication"
+
+msgid "setting.auth.provider.telegram.enabled.desc"
+msgstr "Enables usage of Telegram for user authentication."
+
+msgid "setting.auth.provider.telegram.enabled.label"
+msgstr "Enable Telegram authentication"
+
+msgid "setting.auth.provider.telegram.bot_username.name"
+msgstr "Bot username"
+
+msgid "setting.auth.provider.telegram.bot_username.desc"
+msgstr "The username of your Telegram bot."
+
+msgid "setting.auth.provider.telegram.bot_token.name"
+msgstr "Bot token"
+
+msgid "setting.auth.provider.telegram.bot_token.desc"
+msgstr "The bot token assigned to your Telegram bot by BotFather."
+
+msgid "setting.auth.provider.reddit.enabled.name"
+msgstr "Allow Reddit authentication"
+
+msgid "setting.auth.provider.reddit.enabled.desc"
+msgstr "Enables usage of Reddit for user authentication."
+
+msgid "setting.auth.provider.reddit.enabled.label"
+msgstr "Enable Reddit authentication"
+
+msgid "setting.auth.provider.reddit.client_id.name"
+msgstr "Client ID"
+
+msgid "setting.auth.provider.reddit.client_id.desc"
+msgstr "The client ID of your Reddit API application."
+
+msgid "setting.auth.provider.reddit.client_secret.name"
+msgstr "Client secret"
+
+msgid "setting.auth.provider.reddit.client_secret.desc"
+msgstr "The client secret of your Reddit API application."
+
+msgid "setting.auth.provider.facebook.enabled.name"
+msgstr "Allow Facebook authentication"
+
+msgid "setting.auth.provider.facebook.enabled.desc"
+msgstr "Enables usage of Facebook for user authentication."
+
+msgid "setting.auth.provider.facebook.enabled.label"
+msgstr "Enable Facebook authentication"
+
+msgid "setting.auth.provider.facebook.app_id.name"
+msgstr "App ID"
+
+msgid "setting.auth.provider.facebook.app_id.desc"
+msgstr "The app ID of your Facebook API application."
+
+msgid "setting.auth.provider.facebook.app_secret.name"
+msgstr "App secret"
+
+msgid "setting.auth.provider.facebook.app_secret.desc"
+msgstr "The app secret of your Facebook API application."
+
+msgid "setting.auth.provider.line.enabled.name"
+msgstr "Allow LINE authentication"
+
+msgid "setting.auth.provider.line.enabled.desc"
+msgstr "Enables usage of LINE for user authentication."
+
+msgid "setting.auth.provider.line.enabled.label"
+msgstr "Enable LINE authentication"
+
+msgid "setting.auth.provider.line.channel_id.name"
+msgstr "Channel ID"
+
+msgid "setting.auth.provider.line.channel_id.desc"
+msgstr "The channel ID of your LINE Login application."
+
+msgid "setting.auth.provider.line.channel_secret.name"
+msgstr "Channel secret"
+
+msgid "setting.auth.provider.line.channel_secret.desc"
+msgstr "The channel secret of your LINE Login application."
+
+msgid "setting.auth.provider.groupme.enabled.name"
+msgstr "Allow GroupMe authentication"
+
+msgid "setting.auth.provider.groupme.enabled.desc"
+msgstr "Enables usage of GroupMe for user authentication."
+
+msgid "setting.auth.provider.groupme.enabled.label"
+msgstr "Enable GroupMe authentication"
+
+msgid "setting.auth.provider.groupme.client_id.name"
+msgstr "Client ID"
+
+msgid "setting.auth.provider.groupme.client_id.desc"
+msgstr "The client ID of your GroupMe API application."
+
+msgid "setting.mobile.pwa.enabled.name"
+msgstr "Enable PWA"
+
+msgid "setting.mobile.pwa.enabled.desc"
+msgstr "Whether or not Progressive Web App functionality should be enabled."
+
+msgid "setting.mobile.pwa.enabled.label"
+msgstr "Enable Progressive Web App functionality"
+
+msgid "setting.mobile.pwa.name.name"
+msgstr "Name"
+
+msgid "setting.mobile.pwa.name.desc"
+msgstr "A human-readable name for the site when displayed to the user."
+
+msgid "setting.mobile.pwa.short_name.name"
+msgstr "Short name"
+
+msgid "setting.mobile.pwa.short_name.desc"
+msgstr "A short human-readable name for the application. Intended for when there is insufficient space to display the full name above."
+
+msgid "setting.mobile.pwa.description.name"
+msgstr "Description"
+
+msgid "setting.mobile.pwa.description.desc"
+msgstr "A general description of what the FreeField web app does."
+
+msgid "setting.mobile.pwa.display.name"
+msgstr "Display mode"
+
+msgid "setting.mobile.pwa.display.desc"
+msgstr "The preferred display mode for the website."
+
+msgid "setting.mobile.pwa.display.option.fullscreen"
+msgstr "Fullscreen"
+
+msgid "setting.mobile.pwa.display.option.standalone"
+msgstr "Standalone application"
+
+msgid "setting.mobile.pwa.display.option.minimal_ui"
+msgstr "Standalone application with browser navigation controls"
+
+msgid "setting.mobile.pwa.display.option.browser"
+msgstr "Conventional browser window"
+
+msgid "setting.mobile.pwa.icon.192px.name"
+msgstr "App icon (192px)"
+
+msgid "setting.mobile.pwa.icon.192px.desc"
+msgstr "The icon that serves as the Progressive Web App's small icon. *.png, *.gif, and *.jpg files are allowed. Must not exceed 64 KiB. The uploaded image should be exactly 192x192 px."
+
+msgid "setting.mobile.pwa.icon.512px.name"
+msgstr "App icon (512px)"
+
+msgid "setting.mobile.pwa.icon.512px.desc"
+msgstr "The icon that serves as the Progressive Web App's large icon. *.png, *.gif, and *.jpg files are allowed. Must not exceed 256 KiB. The uploaded image should be exactly 512x512 px."
+
+msgid "setting.mobile.pwa.icon.launch.name"
+msgstr "App icon (loading screen)"
+
+msgid "setting.mobile.pwa.icon.launch.desc"
+msgstr "The icon that serves as the Progressive Web App's icon on the loading screen. *.png, *.gif, *.jpg, and *.svg files are allowed. Must not exceed 256 KiB."
+
+msgid "setting.mobile.pwa.color.background.name"
+msgstr "Background color"
+
+msgid "setting.mobile.pwa.color.background.desc"
+msgstr "The background color for the web app, displayed on the splash screen."
+
+msgid "setting.mobile.pwa.color.foreground.name"
+msgstr "Foreground color"
+
+msgid "setting.mobile.pwa.color.foreground.desc"
+msgstr "The foreground color for the web app, displayed on the splash screen."
+
+msgid "setting.themes.meta.favicon.name"
+msgstr "Favicon"
+
+msgid "setting.themes.meta.favicon.desc"
+msgstr "The icon displayed for this site in the address bar. *.png, *.gif, *.ico, and *.jpg files are allowed. Must not exceed 256 KiB."
+
+msgid "setting.themes.meta.color.name"
+msgstr "Title bar theme color"
+
+msgid "setting.themes.meta.color.desc"
+msgstr "The color displayed in the title and address bars for mobile browsers."
+
+msgid "setting.themes.color.site.name"
+msgstr "Site theme color"
+
+msgid "setting.themes.color.site.desc"
+msgstr "The site-wide theme color, displayed for example in the sidebar."
+
+msgid "setting.themes.color.admin.name"
+msgstr "Adminstration interface"
+
+msgid "setting.themes.color.admin.desc"
+msgstr "Select the color theme of the administration pages."
+
+msgid "setting.themes.color.admin.option.light"
+msgstr "Light"
+
+msgid "setting.themes.color.admin.option.dark"
+msgstr "Dark"
+
+msgid "setting.themes.color.user_settings.theme.name"
+msgstr "User settings default"
+
+msgid "setting.themes.color.user_settings.theme.desc"
+msgstr "Select the default color theme of users' settings pages."
+
+msgid "setting.themes.color.user_settings.theme.option.light"
+msgstr "Light"
+
+msgid "setting.themes.color.user_settings.theme.option.dark"
+msgstr "Dark"
+
+msgid "setting.themes.color.user_settings.allow_personalization.name"
+msgstr "Settings personalization"
+
+msgid "setting.themes.color.user_settings.allow_personalization.desc"
+msgstr "Whether to allow users to set their own color theme for their settings pages instead of the default for their own account."
+
+msgid "setting.themes.color.user_settings.allow_personalization.label"
+msgstr "Allow users to select another user settings color theme"
+
+msgid "setting.themes.color.map.theme.mapbox.name"
+msgstr "Default MapBox theme"
+
+msgid "setting.themes.color.map.theme.mapbox.desc"
+msgstr "Select the default color theme of the map."
+
+msgid "setting.themes.color.map.theme.mapbox.option.basic"
+msgstr "Mapbox Basic"
+
+msgid "setting.themes.color.map.theme.mapbox.option.streets"
+msgstr "Mapbox Streets"
+
+msgid "setting.themes.color.map.theme.mapbox.option.bright"
+msgstr "Mapbox Bright"
+
+msgid "setting.themes.color.map.theme.mapbox.option.light"
+msgstr "Mapbox Light"
+
+msgid "setting.themes.color.map.theme.mapbox.option.dark"
+msgstr "Mapbox Dark"
+
+msgid "setting.themes.color.map.theme.mapbox.option.satellite"
+msgstr "Mapbox Satellite"
+
+msgid "setting.themes.color.map.theme.thunderforest.name"
+msgstr "Default Thunderforest theme"
+
+msgid "setting.themes.color.map.theme.thunderforest.desc"
+msgstr "Select the default color theme of the map."
+
+msgid "setting.themes.color.map.theme.thunderforest.option.cycle"
+msgstr "OpenCycleMap"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.transport"
+msgstr "Transport"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.landscape"
+msgstr "Landscape"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.outdoors"
+msgstr "Outdoors"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.transport_dark"
+msgstr "Transport Dark"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.spinal_map"
+msgstr "Spinal Map"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.pioneer"
+msgstr "Pioneer"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.mobile_atlas"
+msgstr "Mobile Atlas"
+
+msgid "setting.themes.color.map.theme.thunderforest.option.neighbourhood"
+msgstr "Neighbourhood"
+
+msgid "setting.themes.color.map.allow_personalization.name"
+msgstr "Map personalization"
+
+msgid "setting.themes.color.map.allow_personalization.desc"
+msgstr "Whether to allow users to set their own color theme for map instead of the default for their own account."
+
+msgid "setting.themes.color.map.allow_personalization.label"
+msgstr "Allow users to select another map color theme"
+
+msgid "setting.themes.icons.default.name"
+msgstr "Default map marker set"
+
+msgid "setting.themes.icons.default.desc"
+msgstr "Select the style of map markers used by default on the map."
+
+msgid "setting.themes.species.default.name"
+msgstr "Default species icon set"
+
+msgid "setting.themes.species.default.desc"
+msgstr "Select the style of species markers used by default on the map."
+
+msgid "setting.map.provider.source.name"
+msgstr "Map source"
+
+msgid "setting.map.provider.source.desc"
+msgstr "Select which map provider to use."
+
+msgid "setting.map.provider.source.option.mapbox"
+msgstr "Mapbox (mapbox-gl.js)"
+
+msgid "setting.map.provider.source.option.thunderforest"
+msgstr "Thunderforest (leaflet.js)"
+
+msgid "setting.map.provider.mapbox.access_token.name"
+msgstr "Mapbox access token"
+
+msgid "setting.map.provider.mapbox.access_token.desc"
+msgstr "Access token obtained from Mapbox."
+
+msgid "setting.map.provider.thunderforest.api_key.name"
+msgstr "Thunderforest API key"
+
+msgid "setting.map.provider.thunderforest.api_key.desc"
+msgstr "API key obtained from Thunderforest."
+
+msgid "setting.map.provider.directions.name"
+msgstr "Default directions provider"
+
+msgid "setting.map.provider.directions.desc"
+msgstr "Select the default navigation provider to launch when users request directions to a given Pokéstop."
+
+msgid "setting.map.provider.directions.option.baidu"
+msgstr "Baidu Maps"
+
+msgid "setting.map.provider.directions.option.bing"
+msgstr "Bing Maps"
+
+msgid "setting.map.provider.directions.option.google"
+msgstr "Google Maps"
+
+msgid "setting.map.provider.directions.option.here"
+msgstr "HERE"
+
+msgid "setting.map.provider.directions.option.mapquest"
+msgstr "MapQuest"
+
+msgid "setting.map.provider.directions.option.waze"
+msgstr "Waze"
+
+msgid "setting.map.provider.directions.option.yandex"
+msgstr "Yandex.Maps"
+
+msgid "setting.map.default.center.latitude.name"
+msgstr "Latitude"
+
+msgid "setting.map.default.center.latitude.desc"
+msgstr "The latitude portion of the default coordinates to center the map at when it is loaded."
+
+msgid "setting.map.default.center.longitude.name"
+msgstr "Longitude"
+
+msgid "setting.map.default.center.longitude.desc"
+msgstr "The longitude portion of the default coordinates to center the map at when it is loaded."
+
+msgid "setting.map.default.zoom.name"
+msgstr "Zoom level"
+
+msgid "setting.map.default.zoom.desc"
+msgstr "The default zoom level of the map."
+
+msgid "setting.map.default.marker_component.name"
+msgstr "Task component for markers"
+
+msgid "setting.map.default.marker_component.desc"
+msgstr "The default research task component to use for map markers."
+
+msgid "setting.map.default.marker_component.option.objective"
+msgstr "Objectives"
+
+msgid "setting.map.default.marker_component.option.reward"
+msgstr "Rewards"
+
+msgid "setting.map.default.cluster_limit.name"
+msgstr "Maximum visible markers"
+
+msgid "setting.map.default.cluster_limit.desc"
+msgstr "The maximum number of Pokéstops that should be visible on the map for users by default. Lowering this value will put less strain on your players' devices and increase panning and zooming performance when on the map, but might prevent research tasks from being displayed if they are clustered too closely to other Pokéstops. Please see the players FAQ in the documentation for more information."
+
+msgid "setting.map.updates.refresh_interval.name"
+msgstr "Clientside refresh interval"
+
+msgid "setting.map.updates.refresh_interval.desc"
+msgstr "The amount of time in seconds between every time a FreeField client updates the list of POIs and active field research. If you experience high load on your server from FreeField, try increasing this value. The total volume of requests to the REST API for connected clients is (c/i) per second where c=number of active clients and i=refresh interval."
+
+msgid "setting.map.updates.tz.name"
+msgstr "Time zone"
+
+msgid "setting.map.updates.tz.desc"
+msgstr "The time zone used to determine midnight, i.e. the reset time for field research."
+
+msgid "setting.map.geofence.geofence.name"
+msgstr "Pokéstop geofence"
+
+msgid "setting.map.geofence.geofence.desc"
+msgstr "Limits submission of new Pokéstops to areas within the given geofence. Not specifying a geofence will disable geofencing and allows submission of Pokéstops (and by extension, their field research) worldwide."
+
+msgid "setting.map.geofence.hide_outside.name"
+msgstr "Out-of-bounds Pokéstops"
+
+msgid "setting.map.geofence.hide_outside.desc"
+msgstr "Whether or not to hide Pokéstops from the map if they are outside of the geofence selected above."
+
+msgid "setting.map.geofence.hide_outside.label"
+msgstr "Hide all Pokéstops outside of the selected geofence"
+
+msgid "setting.hooks.hook_list.webhook_url.name"
+msgstr "Webhook URL"
+
+msgid "setting.hooks.hook_list.language.name"
+msgstr "Language"
+
+msgid "setting.hooks.hook_list.icons.name"
+msgstr "Icon set"
+
+msgid "setting.hooks.hook_list.icons.option.default"
+msgstr "Default map marker icon set"
+
+msgid "setting.hooks.hook_list.show_species.name"
+msgstr "Show icon for Pokémon"
+
+msgid "setting.hooks.hook_list.show_species.label"
+msgstr "Display Pokémon species as reward icon when available"
+
+msgid "setting.hooks.hook_list.species.name"
+msgstr "Species icons"
+
+msgid "setting.hooks.hook_list.species.option.default"
+msgstr "Default species icon set"
+
+msgid "setting.hooks.hook_list.geofence.name"
+msgstr "Geofence"
+
+msgid "setting.hooks.hook_list.filter_mode.name"
+msgstr "Trigger webhook only if"
+
+msgid "setting.hooks.hook_list.filter_mode.objective.option.whitelist.name"
+msgstr "One of the following objectives are reported"
+
+msgid "setting.hooks.hook_list.filter_mode.objective.option.blacklist.name"
+msgstr "None of the following objectives are reported"
+
+msgid "setting.hooks.hook_list.filter_mode.reward.option.whitelist.name"
+msgstr "One of the following rewards are reported"
+
+msgid "setting.hooks.hook_list.filter_mode.reward.option.blacklist.name"
+msgstr "None of the following rewards are reported"
+
+msgid "setting.hooks.hook_list.actions.name"
+msgstr "Quick actions"
+
+msgid "setting.hooks.hook_list.actions.option.none"
+msgstr "(no action)"
+
+msgid "setting.hooks.hook_list.actions.option.enable"
+msgstr "Enable webhook"
+
+msgid "setting.hooks.hook_list.actions.option.disable"
+msgstr "Disable webhook"
+
+msgid "setting.hooks.hook_list.actions.option.delete"
+msgstr "Delete webhook"
+
+# Telegram specific setting
+msgid "setting.hooks.tg.groups.select.name"
+msgstr "Target group"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.current"
+msgstr "Current group"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.other"
+msgstr "Other groups"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.webhook_url.option.select"
+msgstr "Select group..."
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.bot_token.name"
+msgstr "Bot token"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.name"
+msgstr "Parse mode"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.txt"
+msgstr "Plain text"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.md"
+msgstr "Markdown"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.parse_mode.option.html"
+msgstr "HTML"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_web_page_preview.name"
+msgstr "Disable web preview"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_web_page_preview.label"
+msgstr "Disable link previews for messages posted by this webhook"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_notification.name"
+msgstr "Disable notifications"
+
+# Telegram specific setting
+msgid "setting.hooks.hook_list.tg.disable_notification.label"
+msgstr "Do not send notifications for messages posted by this webhook"
+
+msgid "setting.hooks.add.type.name"
+msgstr "Webhook type"
+
+msgid "setting.hooks.add.type.option.json"
+msgstr "Post JSON"
+
+msgid "setting.hooks.add.type.option.telegram"
+msgstr "Send Telegram message"
+
+msgid "setting.hooks.add.preset.name"
+msgstr "Preset"
+
+msgid "setting.hooks.add.preset.option.none"
+msgstr "(none)"
+
+msgid "setting.updates.current.name"
+msgstr "Current version"
+
+msgid "setting.updates.current.desc"
+msgstr "The current version of FreeField."
+
+msgid "setting.updates.last_check.name"
+msgstr "Last update check"
+
+msgid "setting.updates.last_check.desc"
+msgstr "The last time FreeField checked for updates."
+
+msgid "setting.updates.next_check.name"
+msgstr "Next scheduled check"
+
+msgid "setting.updates.next_check.desc"
+msgstr "The next time FreeField checked for updates."
+
+msgid "setting.updates.check_now.name"
+msgstr "Manually check for updates"
+
+msgid "setting.updates.check_now.desc"
+msgstr "Performs an immediate update check."
+
+msgid "setting.updates.check_now.button"
+msgstr "Check for updates now"
+
+msgid "setting.updates.latest.name"
+msgstr "Latest version"
+
+msgid "setting.updates.latest.desc"
+msgstr "The latest available version of FreeField."
+
+msgid "setting.updates.type.name"
+msgstr "Release type"
+
diff --git a/includes/i18n/sv-SE/sidebar.po b/includes/i18n/sv-SE/sidebar.po
new file mode 100644
index 00000000..90de5321
--- /dev/null
+++ b/includes/i18n/sv-SE/sidebar.po
@@ -0,0 +1,98 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/sidebar.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "sidebar.signed_in_as"
+msgstr "Signed in as"
+
+msgid "sidebar.approval_pending"
+msgstr "Approval pending"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.logout"
+msgstr "Log out"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.login"
+msgstr "Sign in"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.show_motd"
+msgstr "Show MotD"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.return"
+msgstr "Return"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.add_poi"
+msgstr "Pokéstop"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.filters"
+msgstr "Filter"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.search"
+msgstr "Search"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.settings"
+msgstr "Settings"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.manage_site"
+msgstr "Manage site"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.label"
+msgstr "Language:"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.auto"
+msgstr "Auto-detect"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.device"
+msgstr "Device language"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.language.select"
+msgstr "Available languages"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.reset"
+msgstr "Reset all"
+
+# Please keep this string short - ensure that it does not exceeed the width of
+# the sidebar!
+msgid "sidebar.cancel"
+msgstr "Cancel"
+
diff --git a/includes/i18n/sv-SE/species.po b/includes/i18n/sv-SE/species.po
new file mode 100644
index 00000000..d7ce2c82
--- /dev/null
+++ b/includes/i18n/sv-SE/species.po
@@ -0,0 +1,1501 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/species.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+# Note: These should only be translated if an official translation exists for
+# these species in the language you are translating to. E.g. in German, the
+# official translation of "Snorlax" is "Relaxo." ONLY TRANSLATE THESE IF SUCH
+# AN OFFICIAL TRANSLATION EXISTS FOR YOUR LANGUAGE. LEAVE THIS FILE WITHOUT A
+# TRANSLATION IF NO OFFICIAL TRANSLATION IS AVAILABLE FOR YOUR LANGUAGE.
+msgid "species.1.name"
+msgstr "Bulbasaur"
+
+msgid "species.2.name"
+msgstr "Ivysaur"
+
+msgid "species.3.name"
+msgstr "Venusaur"
+
+msgid "species.4.name"
+msgstr "Charmander"
+
+msgid "species.5.name"
+msgstr "Charmeleon"
+
+msgid "species.6.name"
+msgstr "Charizard"
+
+msgid "species.7.name"
+msgstr "Squirtle"
+
+msgid "species.8.name"
+msgstr "Wartortle"
+
+msgid "species.9.name"
+msgstr "Blastoise"
+
+msgid "species.10.name"
+msgstr "Caterpie"
+
+msgid "species.11.name"
+msgstr "Metapod"
+
+msgid "species.12.name"
+msgstr "Butterfree"
+
+msgid "species.13.name"
+msgstr "Weedle"
+
+msgid "species.14.name"
+msgstr "Kakuna"
+
+msgid "species.15.name"
+msgstr "Beedrill"
+
+msgid "species.16.name"
+msgstr "Pidgey"
+
+msgid "species.17.name"
+msgstr "Pidgeotto"
+
+msgid "species.18.name"
+msgstr "Pidgeot"
+
+msgid "species.19.name"
+msgstr "Rattata"
+
+msgid "species.20.name"
+msgstr "Raticate"
+
+msgid "species.21.name"
+msgstr "Spearow"
+
+msgid "species.22.name"
+msgstr "Fearow"
+
+msgid "species.23.name"
+msgstr "Ekans"
+
+msgid "species.24.name"
+msgstr "Arbok"
+
+msgid "species.25.name"
+msgstr "Pikachu"
+
+msgid "species.26.name"
+msgstr "Raichu"
+
+msgid "species.27.name"
+msgstr "Sandshrew"
+
+msgid "species.28.name"
+msgstr "Sandslash"
+
+msgid "species.29.name"
+msgstr "Nidoran♀"
+
+msgid "species.30.name"
+msgstr "Nidorina"
+
+msgid "species.31.name"
+msgstr "Nidoqueen"
+
+msgid "species.32.name"
+msgstr "Nidoran♂"
+
+msgid "species.33.name"
+msgstr "Nidorino"
+
+msgid "species.34.name"
+msgstr "Nidoking"
+
+msgid "species.35.name"
+msgstr "Clefairy"
+
+msgid "species.36.name"
+msgstr "Clefable"
+
+msgid "species.37.name"
+msgstr "Vulpix"
+
+msgid "species.38.name"
+msgstr "Ninetales"
+
+msgid "species.39.name"
+msgstr "Jigglypuff"
+
+msgid "species.40.name"
+msgstr "Wigglytuff"
+
+msgid "species.41.name"
+msgstr "Zubat"
+
+msgid "species.42.name"
+msgstr "Golbat"
+
+msgid "species.43.name"
+msgstr "Oddish"
+
+msgid "species.44.name"
+msgstr "Gloom"
+
+msgid "species.45.name"
+msgstr "Vileplume"
+
+msgid "species.46.name"
+msgstr "Paras"
+
+msgid "species.47.name"
+msgstr "Parasect"
+
+msgid "species.48.name"
+msgstr "Venonat"
+
+msgid "species.49.name"
+msgstr "Venomoth"
+
+msgid "species.50.name"
+msgstr "Diglett"
+
+msgid "species.51.name"
+msgstr "Dugtrio"
+
+msgid "species.52.name"
+msgstr "Meowth"
+
+msgid "species.53.name"
+msgstr "Persian"
+
+msgid "species.54.name"
+msgstr "Psyduck"
+
+msgid "species.55.name"
+msgstr "Golduck"
+
+msgid "species.56.name"
+msgstr "Mankey"
+
+msgid "species.57.name"
+msgstr "Primeape"
+
+msgid "species.58.name"
+msgstr "Growlithe"
+
+msgid "species.59.name"
+msgstr "Arcanine"
+
+msgid "species.60.name"
+msgstr "Poliwag"
+
+msgid "species.61.name"
+msgstr "Poliwhirl"
+
+msgid "species.62.name"
+msgstr "Poliwrath"
+
+msgid "species.63.name"
+msgstr "Abra"
+
+msgid "species.64.name"
+msgstr "Kadabra"
+
+msgid "species.65.name"
+msgstr "Alakazam"
+
+msgid "species.66.name"
+msgstr "Machop"
+
+msgid "species.67.name"
+msgstr "Machoke"
+
+msgid "species.68.name"
+msgstr "Machamp"
+
+msgid "species.69.name"
+msgstr "Bellsprout"
+
+msgid "species.70.name"
+msgstr "Weepinbell"
+
+msgid "species.71.name"
+msgstr "Victreebel"
+
+msgid "species.72.name"
+msgstr "Tentacool"
+
+msgid "species.73.name"
+msgstr "Tentacruel"
+
+msgid "species.74.name"
+msgstr "Geodude"
+
+msgid "species.75.name"
+msgstr "Graveler"
+
+msgid "species.76.name"
+msgstr "Golem"
+
+msgid "species.77.name"
+msgstr "Ponyta"
+
+msgid "species.78.name"
+msgstr "Rapidash"
+
+msgid "species.79.name"
+msgstr "Slowpoke"
+
+msgid "species.80.name"
+msgstr "Slowbro"
+
+msgid "species.81.name"
+msgstr "Magnemite"
+
+msgid "species.82.name"
+msgstr "Magneton"
+
+msgid "species.83.name"
+msgstr "Farfetch'd"
+
+msgid "species.84.name"
+msgstr "Doduo"
+
+msgid "species.85.name"
+msgstr "Dodrio"
+
+msgid "species.86.name"
+msgstr "Seel"
+
+msgid "species.87.name"
+msgstr "Dewgong"
+
+msgid "species.88.name"
+msgstr "Grimer"
+
+msgid "species.89.name"
+msgstr "Muk"
+
+msgid "species.90.name"
+msgstr "Shellder"
+
+msgid "species.91.name"
+msgstr "Cloyster"
+
+msgid "species.92.name"
+msgstr "Gastly"
+
+msgid "species.93.name"
+msgstr "Haunter"
+
+msgid "species.94.name"
+msgstr "Gengar"
+
+msgid "species.95.name"
+msgstr "Onix"
+
+msgid "species.96.name"
+msgstr "Drowzee"
+
+msgid "species.97.name"
+msgstr "Hypno"
+
+msgid "species.98.name"
+msgstr "Krabby"
+
+msgid "species.99.name"
+msgstr "Kingler"
+
+msgid "species.100.name"
+msgstr "Voltorb"
+
+msgid "species.101.name"
+msgstr "Electrode"
+
+msgid "species.102.name"
+msgstr "Exeggcute"
+
+msgid "species.103.name"
+msgstr "Exeggutor"
+
+msgid "species.104.name"
+msgstr "Cubone"
+
+msgid "species.105.name"
+msgstr "Marowak"
+
+msgid "species.106.name"
+msgstr "Hitmonlee"
+
+msgid "species.107.name"
+msgstr "Hitmonchan"
+
+msgid "species.108.name"
+msgstr "Lickitung"
+
+msgid "species.109.name"
+msgstr "Koffing"
+
+msgid "species.110.name"
+msgstr "Weezing"
+
+msgid "species.111.name"
+msgstr "Rhyhorn"
+
+msgid "species.112.name"
+msgstr "Rhydon"
+
+msgid "species.113.name"
+msgstr "Chansey"
+
+msgid "species.114.name"
+msgstr "Tangela"
+
+msgid "species.115.name"
+msgstr "Kangaskhan"
+
+msgid "species.116.name"
+msgstr "Horsea"
+
+msgid "species.117.name"
+msgstr "Seadra"
+
+msgid "species.118.name"
+msgstr "Goldeen"
+
+msgid "species.119.name"
+msgstr "Seaking"
+
+msgid "species.120.name"
+msgstr "Staryu"
+
+msgid "species.121.name"
+msgstr "Starmie"
+
+msgid "species.122.name"
+msgstr "Mr. Mime"
+
+msgid "species.123.name"
+msgstr "Scyther"
+
+msgid "species.124.name"
+msgstr "Jynx"
+
+msgid "species.125.name"
+msgstr "Electabuzz"
+
+msgid "species.126.name"
+msgstr "Magmar"
+
+msgid "species.127.name"
+msgstr "Pinsir"
+
+msgid "species.128.name"
+msgstr "Tauros"
+
+msgid "species.129.name"
+msgstr "Magikarp"
+
+msgid "species.130.name"
+msgstr "Gyarados"
+
+msgid "species.131.name"
+msgstr "Lapras"
+
+msgid "species.132.name"
+msgstr "Ditto"
+
+msgid "species.133.name"
+msgstr "Eevee"
+
+msgid "species.134.name"
+msgstr "Vaporeon"
+
+msgid "species.135.name"
+msgstr "Jolteon"
+
+msgid "species.136.name"
+msgstr "Flareon"
+
+msgid "species.137.name"
+msgstr "Porygon"
+
+msgid "species.138.name"
+msgstr "Omanyte"
+
+msgid "species.139.name"
+msgstr "Omastar"
+
+msgid "species.140.name"
+msgstr "Kabuto"
+
+msgid "species.141.name"
+msgstr "Kabutops"
+
+msgid "species.142.name"
+msgstr "Aerodactyl"
+
+msgid "species.143.name"
+msgstr "Snorlax"
+
+msgid "species.144.name"
+msgstr "Articuno"
+
+msgid "species.145.name"
+msgstr "Zapdos"
+
+msgid "species.146.name"
+msgstr "Moltres"
+
+msgid "species.147.name"
+msgstr "Dratini"
+
+msgid "species.148.name"
+msgstr "Dragonair"
+
+msgid "species.149.name"
+msgstr "Dragonite"
+
+msgid "species.150.name"
+msgstr "Mewtwo"
+
+msgid "species.151.name"
+msgstr "Mew"
+
+msgid "species.152.name"
+msgstr "Chikorita"
+
+msgid "species.153.name"
+msgstr "Bayleef"
+
+msgid "species.154.name"
+msgstr "Meganium"
+
+msgid "species.155.name"
+msgstr "Cyndaquil"
+
+msgid "species.156.name"
+msgstr "Quilava"
+
+msgid "species.157.name"
+msgstr "Typhlosion"
+
+msgid "species.158.name"
+msgstr "Totodile"
+
+msgid "species.159.name"
+msgstr "Croconaw"
+
+msgid "species.160.name"
+msgstr "Feraligatr"
+
+msgid "species.161.name"
+msgstr "Sentret"
+
+msgid "species.162.name"
+msgstr "Furret"
+
+msgid "species.163.name"
+msgstr "Hoothoot"
+
+msgid "species.164.name"
+msgstr "Noctowl"
+
+msgid "species.165.name"
+msgstr "Ledyba"
+
+msgid "species.166.name"
+msgstr "Ledian"
+
+msgid "species.167.name"
+msgstr "Spinarak"
+
+msgid "species.168.name"
+msgstr "Ariados"
+
+msgid "species.169.name"
+msgstr "Crobat"
+
+msgid "species.170.name"
+msgstr "Chinchou"
+
+msgid "species.171.name"
+msgstr "Lanturn"
+
+msgid "species.172.name"
+msgstr "Pichu"
+
+msgid "species.173.name"
+msgstr "Cleffa"
+
+msgid "species.174.name"
+msgstr "Igglybuff"
+
+msgid "species.175.name"
+msgstr "Togepi"
+
+msgid "species.176.name"
+msgstr "Togetic"
+
+msgid "species.177.name"
+msgstr "Natu"
+
+msgid "species.178.name"
+msgstr "Xatu"
+
+msgid "species.179.name"
+msgstr "Mareep"
+
+msgid "species.180.name"
+msgstr "Flaaffy"
+
+msgid "species.181.name"
+msgstr "Ampharos"
+
+msgid "species.182.name"
+msgstr "Bellossom"
+
+msgid "species.183.name"
+msgstr "Marill"
+
+msgid "species.184.name"
+msgstr "Azumarill"
+
+msgid "species.185.name"
+msgstr "Sudowoodo"
+
+msgid "species.186.name"
+msgstr "Politoed"
+
+msgid "species.187.name"
+msgstr "Hoppip"
+
+msgid "species.188.name"
+msgstr "Skiploom"
+
+msgid "species.189.name"
+msgstr "Jumpluff"
+
+msgid "species.190.name"
+msgstr "Aipom"
+
+msgid "species.191.name"
+msgstr "Sunkern"
+
+msgid "species.192.name"
+msgstr "Sunflora"
+
+msgid "species.193.name"
+msgstr "Yanma"
+
+msgid "species.194.name"
+msgstr "Wooper"
+
+msgid "species.195.name"
+msgstr "Quagsire"
+
+msgid "species.196.name"
+msgstr "Espeon"
+
+msgid "species.197.name"
+msgstr "Umbreon"
+
+msgid "species.198.name"
+msgstr "Murkrow"
+
+msgid "species.199.name"
+msgstr "Slowking"
+
+msgid "species.200.name"
+msgstr "Misdreavus"
+
+msgid "species.201.name"
+msgstr "Unown"
+
+msgid "species.202.name"
+msgstr "Wobbuffet"
+
+msgid "species.203.name"
+msgstr "Girafarig"
+
+msgid "species.204.name"
+msgstr "Pineco"
+
+msgid "species.205.name"
+msgstr "Forretress"
+
+msgid "species.206.name"
+msgstr "Dunsparce"
+
+msgid "species.207.name"
+msgstr "Gligar"
+
+msgid "species.208.name"
+msgstr "Steelix"
+
+msgid "species.209.name"
+msgstr "Snubbull"
+
+msgid "species.210.name"
+msgstr "Granbull"
+
+msgid "species.211.name"
+msgstr "Qwilfish"
+
+msgid "species.212.name"
+msgstr "Scizor"
+
+msgid "species.213.name"
+msgstr "Shuckle"
+
+msgid "species.214.name"
+msgstr "Heracross"
+
+msgid "species.215.name"
+msgstr "Sneasel"
+
+msgid "species.216.name"
+msgstr "Teddiursa"
+
+msgid "species.217.name"
+msgstr "Ursaring"
+
+msgid "species.218.name"
+msgstr "Slugma"
+
+msgid "species.219.name"
+msgstr "Magcargo"
+
+msgid "species.220.name"
+msgstr "Swinub"
+
+msgid "species.221.name"
+msgstr "Piloswine"
+
+msgid "species.222.name"
+msgstr "Corsola"
+
+msgid "species.223.name"
+msgstr "Remoraid"
+
+msgid "species.224.name"
+msgstr "Octillery"
+
+msgid "species.225.name"
+msgstr "Delibird"
+
+msgid "species.226.name"
+msgstr "Mantine"
+
+msgid "species.227.name"
+msgstr "Skarmory"
+
+msgid "species.228.name"
+msgstr "Houndour"
+
+msgid "species.229.name"
+msgstr "Houndoom"
+
+msgid "species.230.name"
+msgstr "Kingdra"
+
+msgid "species.231.name"
+msgstr "Phanpy"
+
+msgid "species.232.name"
+msgstr "Donphan"
+
+msgid "species.233.name"
+msgstr "Porygon2"
+
+msgid "species.234.name"
+msgstr "Stantler"
+
+msgid "species.235.name"
+msgstr "Smeargle"
+
+msgid "species.236.name"
+msgstr "Tyrogue"
+
+msgid "species.237.name"
+msgstr "Hitmontop"
+
+msgid "species.238.name"
+msgstr "Smoochum"
+
+msgid "species.239.name"
+msgstr "Elekid"
+
+msgid "species.240.name"
+msgstr "Magby"
+
+msgid "species.241.name"
+msgstr "Miltank"
+
+msgid "species.242.name"
+msgstr "Blissey"
+
+msgid "species.243.name"
+msgstr "Raikou"
+
+msgid "species.244.name"
+msgstr "Entei"
+
+msgid "species.245.name"
+msgstr "Suicune"
+
+msgid "species.246.name"
+msgstr "Larvitar"
+
+msgid "species.247.name"
+msgstr "Pupitar"
+
+msgid "species.248.name"
+msgstr "Tyranitar"
+
+msgid "species.249.name"
+msgstr "Lugia"
+
+msgid "species.250.name"
+msgstr "Ho-Oh"
+
+msgid "species.251.name"
+msgstr "Celebi"
+
+msgid "species.252.name"
+msgstr "Treecko"
+
+msgid "species.253.name"
+msgstr "Grovyle"
+
+msgid "species.254.name"
+msgstr "Sceptile"
+
+msgid "species.255.name"
+msgstr "Torchic"
+
+msgid "species.256.name"
+msgstr "Combusken"
+
+msgid "species.257.name"
+msgstr "Blaziken"
+
+msgid "species.258.name"
+msgstr "Mudkip"
+
+msgid "species.259.name"
+msgstr "Marshtomp"
+
+msgid "species.260.name"
+msgstr "Swampert"
+
+msgid "species.261.name"
+msgstr "Poochyena"
+
+msgid "species.262.name"
+msgstr "Mightyena"
+
+msgid "species.263.name"
+msgstr "Zigzagoon"
+
+msgid "species.264.name"
+msgstr "Linoone"
+
+msgid "species.265.name"
+msgstr "Wurmple"
+
+msgid "species.266.name"
+msgstr "Silcoon"
+
+msgid "species.267.name"
+msgstr "Beautifly"
+
+msgid "species.268.name"
+msgstr "Cascoon"
+
+msgid "species.269.name"
+msgstr "Dustox"
+
+msgid "species.270.name"
+msgstr "Lotad"
+
+msgid "species.271.name"
+msgstr "Lombre"
+
+msgid "species.272.name"
+msgstr "Ludicolo"
+
+msgid "species.273.name"
+msgstr "Seedot"
+
+msgid "species.274.name"
+msgstr "Nuzleaf"
+
+msgid "species.275.name"
+msgstr "Shiftry"
+
+msgid "species.276.name"
+msgstr "Taillow"
+
+msgid "species.277.name"
+msgstr "Swellow"
+
+msgid "species.278.name"
+msgstr "Wingull"
+
+msgid "species.279.name"
+msgstr "Pelipper"
+
+msgid "species.280.name"
+msgstr "Ralts"
+
+msgid "species.281.name"
+msgstr "Kirlia"
+
+msgid "species.282.name"
+msgstr "Gardevoir"
+
+msgid "species.283.name"
+msgstr "Surskit"
+
+msgid "species.284.name"
+msgstr "Masquerain"
+
+msgid "species.285.name"
+msgstr "Shroomish"
+
+msgid "species.286.name"
+msgstr "Breloom"
+
+msgid "species.287.name"
+msgstr "Slakoth"
+
+msgid "species.288.name"
+msgstr "Vigoroth"
+
+msgid "species.289.name"
+msgstr "Slaking"
+
+msgid "species.290.name"
+msgstr "Nincada"
+
+msgid "species.291.name"
+msgstr "Ninjask"
+
+msgid "species.292.name"
+msgstr "Shedinja"
+
+msgid "species.293.name"
+msgstr "Whismur"
+
+msgid "species.294.name"
+msgstr "Loudred"
+
+msgid "species.295.name"
+msgstr "Exploud"
+
+msgid "species.296.name"
+msgstr "Makuhita"
+
+msgid "species.297.name"
+msgstr "Hariyama"
+
+msgid "species.298.name"
+msgstr "Azurill"
+
+msgid "species.299.name"
+msgstr "Nosepass"
+
+msgid "species.300.name"
+msgstr "Skitty"
+
+msgid "species.301.name"
+msgstr "Delcatty"
+
+msgid "species.302.name"
+msgstr "Sableye"
+
+msgid "species.303.name"
+msgstr "Mawile"
+
+msgid "species.304.name"
+msgstr "Aron"
+
+msgid "species.305.name"
+msgstr "Lairon"
+
+msgid "species.306.name"
+msgstr "Aggron"
+
+msgid "species.307.name"
+msgstr "Meditite"
+
+msgid "species.308.name"
+msgstr "Medicham"
+
+msgid "species.309.name"
+msgstr "Electrike"
+
+msgid "species.310.name"
+msgstr "Manectric"
+
+msgid "species.311.name"
+msgstr "Plusle"
+
+msgid "species.312.name"
+msgstr "Minun"
+
+msgid "species.313.name"
+msgstr "Volbeat"
+
+msgid "species.314.name"
+msgstr "Illumise"
+
+msgid "species.315.name"
+msgstr "Roselia"
+
+msgid "species.316.name"
+msgstr "Gulpin"
+
+msgid "species.317.name"
+msgstr "Swalot"
+
+msgid "species.318.name"
+msgstr "Carvanha"
+
+msgid "species.319.name"
+msgstr "Sharpedo"
+
+msgid "species.320.name"
+msgstr "Wailmer"
+
+msgid "species.321.name"
+msgstr "Wailord"
+
+msgid "species.322.name"
+msgstr "Numel"
+
+msgid "species.323.name"
+msgstr "Camerupt"
+
+msgid "species.324.name"
+msgstr "Torkoal"
+
+msgid "species.325.name"
+msgstr "Spoink"
+
+msgid "species.326.name"
+msgstr "Grumpig"
+
+msgid "species.327.name"
+msgstr "Spinda"
+
+msgid "species.328.name"
+msgstr "Trapinch"
+
+msgid "species.329.name"
+msgstr "Vibrava"
+
+msgid "species.330.name"
+msgstr "Flygon"
+
+msgid "species.331.name"
+msgstr "Cacnea"
+
+msgid "species.332.name"
+msgstr "Cacturne"
+
+msgid "species.333.name"
+msgstr "Swablu"
+
+msgid "species.334.name"
+msgstr "Altaria"
+
+msgid "species.335.name"
+msgstr "Zangoose"
+
+msgid "species.336.name"
+msgstr "Seviper"
+
+msgid "species.337.name"
+msgstr "Lunatone"
+
+msgid "species.338.name"
+msgstr "Solrock"
+
+msgid "species.339.name"
+msgstr "Barboach"
+
+msgid "species.340.name"
+msgstr "Whiscash"
+
+msgid "species.341.name"
+msgstr "Corphish"
+
+msgid "species.342.name"
+msgstr "Crawdaunt"
+
+msgid "species.343.name"
+msgstr "Baltoy"
+
+msgid "species.344.name"
+msgstr "Claydol"
+
+msgid "species.345.name"
+msgstr "Lileep"
+
+msgid "species.346.name"
+msgstr "Cradily"
+
+msgid "species.347.name"
+msgstr "Anorith"
+
+msgid "species.348.name"
+msgstr "Armaldo"
+
+msgid "species.349.name"
+msgstr "Feebas"
+
+msgid "species.350.name"
+msgstr "Milotic"
+
+msgid "species.351.name"
+msgstr "Castform"
+
+msgid "species.352.name"
+msgstr "Kecleon"
+
+msgid "species.353.name"
+msgstr "Shuppet"
+
+msgid "species.354.name"
+msgstr "Banette"
+
+msgid "species.355.name"
+msgstr "Duskull"
+
+msgid "species.356.name"
+msgstr "Dusclops"
+
+msgid "species.357.name"
+msgstr "Tropius"
+
+msgid "species.358.name"
+msgstr "Chimecho"
+
+msgid "species.359.name"
+msgstr "Absol"
+
+msgid "species.360.name"
+msgstr "Wynaut"
+
+msgid "species.361.name"
+msgstr "Snorunt"
+
+msgid "species.362.name"
+msgstr "Glalie"
+
+msgid "species.363.name"
+msgstr "Spheal"
+
+msgid "species.364.name"
+msgstr "Sealeo"
+
+msgid "species.365.name"
+msgstr "Walrein"
+
+msgid "species.366.name"
+msgstr "Clamperl"
+
+msgid "species.367.name"
+msgstr "Huntail"
+
+msgid "species.368.name"
+msgstr "Gorebyss"
+
+msgid "species.369.name"
+msgstr "Relicanth"
+
+msgid "species.370.name"
+msgstr "Luvdisc"
+
+msgid "species.371.name"
+msgstr "Bagon"
+
+msgid "species.372.name"
+msgstr "Shelgon"
+
+msgid "species.373.name"
+msgstr "Salamence"
+
+msgid "species.374.name"
+msgstr "Beldum"
+
+msgid "species.375.name"
+msgstr "Metang"
+
+msgid "species.376.name"
+msgstr "Metagross"
+
+msgid "species.377.name"
+msgstr "Regirock"
+
+msgid "species.378.name"
+msgstr "Regice"
+
+msgid "species.379.name"
+msgstr "Registeel"
+
+msgid "species.380.name"
+msgstr "Latias"
+
+msgid "species.381.name"
+msgstr "Latios"
+
+msgid "species.382.name"
+msgstr "Kyogre"
+
+msgid "species.383.name"
+msgstr "Groudon"
+
+msgid "species.384.name"
+msgstr "Rayquaza"
+
+msgid "species.385.name"
+msgstr "Jirachi"
+
+msgid "species.386.name"
+msgstr "Deoxys"
+
+msgid "species.387.name"
+msgstr "Turtwig"
+
+msgid "species.388.name"
+msgstr "Grotle"
+
+msgid "species.389.name"
+msgstr "Torterra"
+
+msgid "species.390.name"
+msgstr "Chimchar"
+
+msgid "species.391.name"
+msgstr "Monferno"
+
+msgid "species.392.name"
+msgstr "Infernape"
+
+msgid "species.393.name"
+msgstr "Piplup"
+
+msgid "species.394.name"
+msgstr "Prinplup"
+
+msgid "species.395.name"
+msgstr "Empoleon"
+
+msgid "species.396.name"
+msgstr "Starly"
+
+msgid "species.397.name"
+msgstr "Staravia"
+
+msgid "species.398.name"
+msgstr "Staraptor"
+
+msgid "species.399.name"
+msgstr "Bidoof"
+
+msgid "species.400.name"
+msgstr "Bibarel"
+
+msgid "species.401.name"
+msgstr "Kricketot"
+
+msgid "species.402.name"
+msgstr "Kricketune"
+
+msgid "species.403.name"
+msgstr "Shinx"
+
+msgid "species.404.name"
+msgstr "Luxio"
+
+msgid "species.405.name"
+msgstr "Luxray"
+
+msgid "species.406.name"
+msgstr "Budew"
+
+msgid "species.407.name"
+msgstr "Roserade"
+
+msgid "species.408.name"
+msgstr "Cranidos"
+
+msgid "species.409.name"
+msgstr "Rampardos"
+
+msgid "species.410.name"
+msgstr "Shieldon"
+
+msgid "species.411.name"
+msgstr "Bastiodon"
+
+msgid "species.412.name"
+msgstr "Burmy"
+
+msgid "species.413.name"
+msgstr "Wormadam"
+
+msgid "species.414.name"
+msgstr "Mothim"
+
+msgid "species.415.name"
+msgstr "Combee"
+
+msgid "species.416.name"
+msgstr "Vespiquen"
+
+msgid "species.417.name"
+msgstr "Pachirisu"
+
+msgid "species.418.name"
+msgstr "Buizel"
+
+msgid "species.419.name"
+msgstr "Floatzel"
+
+msgid "species.420.name"
+msgstr "Cherubi"
+
+msgid "species.421.name"
+msgstr "Cherrim"
+
+msgid "species.422.name"
+msgstr "Shellos"
+
+msgid "species.423.name"
+msgstr "Gastrodon"
+
+msgid "species.424.name"
+msgstr "Ambipom"
+
+msgid "species.425.name"
+msgstr "Drifloon"
+
+msgid "species.426.name"
+msgstr "Drifblim"
+
+msgid "species.427.name"
+msgstr "Buneary"
+
+msgid "species.428.name"
+msgstr "Lopunny"
+
+msgid "species.429.name"
+msgstr "Mismagius"
+
+msgid "species.430.name"
+msgstr "Honchkrow"
+
+msgid "species.431.name"
+msgstr "Glameow"
+
+msgid "species.432.name"
+msgstr "Purugly"
+
+msgid "species.433.name"
+msgstr "Chingling"
+
+msgid "species.434.name"
+msgstr "Stunky"
+
+msgid "species.435.name"
+msgstr "Skuntank"
+
+msgid "species.436.name"
+msgstr "Bronzor"
+
+msgid "species.437.name"
+msgstr "Bronzong"
+
+msgid "species.438.name"
+msgstr "Bonsly"
+
+msgid "species.439.name"
+msgstr "Mime Jr."
+
+msgid "species.440.name"
+msgstr "Happiny"
+
+msgid "species.441.name"
+msgstr "Chatot"
+
+msgid "species.442.name"
+msgstr "Spiritomb"
+
+msgid "species.443.name"
+msgstr "Gible"
+
+msgid "species.444.name"
+msgstr "Gabite"
+
+msgid "species.445.name"
+msgstr "Garchomp"
+
+msgid "species.446.name"
+msgstr "Munchlax"
+
+msgid "species.447.name"
+msgstr "Riolu"
+
+msgid "species.448.name"
+msgstr "Lucario"
+
+msgid "species.449.name"
+msgstr "Hippopotas"
+
+msgid "species.450.name"
+msgstr "Hippowdon"
+
+msgid "species.451.name"
+msgstr "Skorupi"
+
+msgid "species.452.name"
+msgstr "Drapion"
+
+msgid "species.453.name"
+msgstr "Croagunk"
+
+msgid "species.454.name"
+msgstr "Toxicroak"
+
+msgid "species.455.name"
+msgstr "Carnivine"
+
+msgid "species.456.name"
+msgstr "Finneon"
+
+msgid "species.457.name"
+msgstr "Lumineon"
+
+msgid "species.458.name"
+msgstr "Mantyke"
+
+msgid "species.459.name"
+msgstr "Snover"
+
+msgid "species.460.name"
+msgstr "Abomasnow"
+
+msgid "species.461.name"
+msgstr "Weavile"
+
+msgid "species.462.name"
+msgstr "Magnezone"
+
+msgid "species.463.name"
+msgstr "Lickilicky"
+
+msgid "species.464.name"
+msgstr "Rhyperior"
+
+msgid "species.465.name"
+msgstr "Tangrowth"
+
+msgid "species.466.name"
+msgstr "Electivire"
+
+msgid "species.467.name"
+msgstr "Magmortar"
+
+msgid "species.468.name"
+msgstr "Togekiss"
+
+msgid "species.469.name"
+msgstr "Yanmega"
+
+msgid "species.470.name"
+msgstr "Leafeon"
+
+msgid "species.471.name"
+msgstr "Glaceon"
+
+msgid "species.472.name"
+msgstr "Gliscor"
+
+msgid "species.473.name"
+msgstr "Mamoswine"
+
+msgid "species.474.name"
+msgstr "Porygon-Z"
+
+msgid "species.475.name"
+msgstr "Gallade"
+
+msgid "species.476.name"
+msgstr "Probopass"
+
+msgid "species.477.name"
+msgstr "Dusknoir"
+
+msgid "species.478.name"
+msgstr "Froslass"
+
+msgid "species.479.name"
+msgstr "Rotom"
+
+msgid "species.480.name"
+msgstr "Uxie"
+
+msgid "species.481.name"
+msgstr "Mesprit"
+
+msgid "species.482.name"
+msgstr "Azelf"
+
+msgid "species.483.name"
+msgstr "Dialga"
+
+msgid "species.484.name"
+msgstr "Palkia"
+
+msgid "species.485.name"
+msgstr "Heatran"
+
+msgid "species.486.name"
+msgstr "Regigigas"
+
+msgid "species.487.name"
+msgstr "Giratina"
+
+msgid "species.488.name"
+msgstr "Cresselia"
+
+msgid "species.489.name"
+msgstr "Phione"
+
+msgid "species.490.name"
+msgstr "Manaphy"
+
+msgid "species.491.name"
+msgstr "Darkrai"
+
+msgid "species.492.name"
+msgstr "Shaymin"
+
+msgid "species.493.name"
+msgstr "Arceus"
+
diff --git a/includes/i18n/sv-SE/theme.po b/includes/i18n/sv-SE/theme.po
new file mode 100644
index 00000000..d2f77987
--- /dev/null
+++ b/includes/i18n/sv-SE/theme.po
@@ -0,0 +1,24 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/theme.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+# This string is used to display the name and author of each installed icon set
+# in the icon set drop-down selector. Example: "John's Amazing Map Markers (by
+# John Doe)"
+# %1 = Name of icon set, %2 = Author of icon set
+msgid "theme.name_label"
+msgstr "{%1} (by {%2})"
+
diff --git a/includes/i18n/sv-SE/type.po b/includes/i18n/sv-SE/type.po
new file mode 100644
index 00000000..019bcb1c
--- /dev/null
+++ b/includes/i18n/sv-SE/type.po
@@ -0,0 +1,71 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/type.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "type.normal"
+msgstr "Normal"
+
+msgid "type.fighting"
+msgstr "Fighting"
+
+msgid "type.flying"
+msgstr "Flying"
+
+msgid "type.poison"
+msgstr "Poison"
+
+msgid "type.ground"
+msgstr "Ground"
+
+msgid "type.rock"
+msgstr "Rock"
+
+msgid "type.bug"
+msgstr "Bug"
+
+msgid "type.ghost"
+msgstr "Ghost"
+
+msgid "type.steel"
+msgstr "Steel"
+
+msgid "type.fire"
+msgstr "Fire"
+
+msgid "type.water"
+msgstr "Water"
+
+msgid "type.grass"
+msgstr "Grass"
+
+msgid "type.electric"
+msgstr "Electric"
+
+msgid "type.psychic"
+msgstr "Psychic"
+
+msgid "type.ice"
+msgstr "Ice"
+
+msgid "type.dragon"
+msgstr "Dragon"
+
+msgid "type.dark"
+msgstr "Dark"
+
+msgid "type.fairy"
+msgstr "Fairy"
+
diff --git a/includes/i18n/sv-SE/ui.po b/includes/i18n/sv-SE/ui.po
new file mode 100644
index 00000000..fda6c75b
--- /dev/null
+++ b/includes/i18n/sv-SE/ui.po
@@ -0,0 +1,41 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/ui.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "ui.button.close"
+msgstr "Close"
+
+msgid "ui.button.cancel"
+msgstr "Cancel"
+
+msgid "ui.button.select"
+msgstr "Select"
+
+msgid "ui.button.save"
+msgstr "Save settings"
+
+msgid "ui.button.done"
+msgstr "Done"
+
+msgid "ui.button.retry"
+msgstr "Try again"
+
+msgid "ui.dropdown.none_selected"
+msgstr "< none >"
+
+msgid "ui.paginate.go_to"
+msgstr "Go to page:"
+
diff --git a/includes/i18n/sv-SE/user_setting.po b/includes/i18n/sv-SE/user_setting.po
new file mode 100644
index 00000000..698f5597
--- /dev/null
+++ b/includes/i18n/sv-SE/user_setting.po
@@ -0,0 +1,54 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/user_setting.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "user_setting.nickname.name"
+msgstr "Nickname"
+
+msgid "user_setting.sign_out_everywhere.name"
+msgstr "Sign out everywhere"
+
+msgid "user_setting.sign_out_everywhere.info"
+msgstr "If you believe your account has been compromised, it is possible to sign out from all devices currently signed in to your FreeField account. Please note that if you do this, you will be signed out on this device as well, and will have to re-authenticate."
+
+msgid "user_setting.sign_out_everywhere.button"
+msgstr "Sign out from all devices"
+
+msgid "user_setting.directions_provider.name"
+msgstr "Directions provider"
+
+msgid "user_setting.interface_theme.name"
+msgstr "Interface theme"
+
+msgid "user_setting.map_theme.name"
+msgstr "Map theme"
+
+msgid "user_setting.icons.name"
+msgstr "Map markers"
+
+msgid "user_setting.species.name"
+msgstr "Pokémon icons"
+
+msgid "user_setting.marker_component.name"
+msgstr "Task component for markers"
+
+msgid "user_setting.cluster_limit.name"
+msgstr "Maximum visible markers"
+
+# %1 = Number of POIs
+msgid "user_setting.cluster_limit.option.default"
+msgstr "Default ({%1})"
+
diff --git a/includes/i18n/sv-SE/user_settings.po b/includes/i18n/sv-SE/user_settings.po
new file mode 100644
index 00000000..4e889215
--- /dev/null
+++ b/includes/i18n/sv-SE/user_settings.po
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/user_settings.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "user_settings.no_local_storage"
+msgstr "WARNING: Local storage is not supported in your browser! You will not be able to customize your FreeField appearance, and the map will not save your last viewed location for your next visit. The most likely cause of this error is using a severely out of date web browser. It is strongly recommended that you upgrade to a modern web browser in order to enjoy the full functionality of FreeField."
+
+msgid "user_settings.reset.confirm"
+msgstr "Are you sure you want to reset all custom settings?"
+
+msgid "user_settings.value.default"
+msgstr "Default"
+
+msgid "user_settings.page.title"
+msgstr "Settings"
+
+msgid "user_settings.page.subtitle"
+msgstr "Personalize your experience"
+
+msgid "user_settings.section.account"
+msgstr "Account"
+
+msgid "user_settings.section.map_providers"
+msgstr "Map providers"
+
+msgid "user_settings.section.appearance"
+msgstr "Appearance"
+
+msgid "user_settings.section.performance"
+msgstr "Performance"
+
diff --git a/includes/i18n/sv-SE/webhook.po b/includes/i18n/sv-SE/webhook.po
new file mode 100644
index 00000000..c3762500
--- /dev/null
+++ b/includes/i18n/sv-SE/webhook.po
@@ -0,0 +1,41 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/webhook.po\n"
+"PO-Revision-Date: 2019-07-21 10:24\n"
+
+msgid "webhook.report_title"
+msgstr "Field research reported!"
+
+msgid "webhook.poi"
+msgstr "Pokéstop"
+
+msgid "webhook.click_for_directions"
+msgstr "Click here for directions"
+
+msgid "webhook.objective"
+msgstr "Objective"
+
+msgid "webhook.reward"
+msgstr "Reward"
+
+# %1 = Nickname of user who reported research
+msgid "webhook.reported_by"
+msgstr "Reported by {%1}"
+
+# %1 = Research objective (e.g. "Make 3 Great Throws")
+# %2 = Research reward (e.g. "1 Max Revive")
+msgid "webhook.x_for_y"
+msgstr "{%1} for {%2}"
+
diff --git a/includes/i18n/sv-SE/xhr.po b/includes/i18n/sv-SE/xhr.po
new file mode 100644
index 00000000..a23ee8a1
--- /dev/null
+++ b/includes/i18n/sv-SE/xhr.po
@@ -0,0 +1,53 @@
+msgid ""
+msgstr ""
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Project-Id-Version: freefield\n"
+"Last-Translator: Marius Lindvall (bilde2910)\n"
+"Language-Team: Swedish\n"
+"Language: sv_SE\n"
+"X-Crowdin-SourceKey: msgstr\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: crowdin.com\n"
+"X-Crowdin-Project: freefield\n"
+"X-Crowdin-Language: sv-SE\n"
+"X-Crowdin-File: /master/includes/i18n/en-US/xhr.po\n"
+"PO-Revision-Date: 2019-07-21 10:25\n"
+
+msgid "xhr.failed.reason.unknown_reason"
+msgstr "Unknown reason"
+
+msgid "xhr.failed.reason.access_denied"
+msgstr "Access denied"
+
+msgid "xhr.failed.reason.missing_fields"
+msgstr "Insufficient data"
+
+msgid "xhr.failed.reason.invalid_data"
+msgstr "Invalid data"
+
+msgid "xhr.failed.reason.database_error"
+msgstr "Database connection failed"
+
+msgid "xhr.failed.reason.http_405"
+msgstr "Method not allowed"
+
+msgid "xhr.failed.reason.timeout"
+msgstr "Request timed out"
+
+msgid "xhr.failed.reason.upstream_failed"
+msgstr "The upstream server request was unsuccessful"
+
+msgid "xhr.failed.reason.objective_null"
+msgstr "No research objective has been chosen"
+
+msgid "xhr.failed.reason.reward_null"
+msgstr "No research reward has been chosen"
+
+msgid "xhr.failed.reason.name_empty"
+msgstr "Name cannot be empty"
+
+msgid "xhr.failed.reason.invalid_location"
+msgstr "Location is out of bounds"
+
diff --git a/includes/i18n/zh-TW/access_denied.po b/includes/i18n/zh-TW/access_denied.po
index a785c80f..6c3e7436 100644
--- a/includes/i18n/zh-TW/access_denied.po
+++ b/includes/i18n/zh-TW/access_denied.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/access_denied.po\n"
-"PO-Revision-Date: 2019-05-31 01:25\n"
+"PO-Revision-Date: 2019-06-05 22:24\n"
msgid "access_denied.title"
msgstr "拒絕訪問"
diff --git a/includes/i18n/zh-TW/admin.po b/includes/i18n/zh-TW/admin.po
index 38bb964c..4b453cff 100644
--- a/includes/i18n/zh-TW/admin.po
+++ b/includes/i18n/zh-TW/admin.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/admin.po\n"
-"PO-Revision-Date: 2019-06-03 10:07\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# Paragraph text input above this string.
msgid "admin.option.paragraph.disclaimer"
diff --git a/includes/i18n/zh-TW/approve_user.po b/includes/i18n/zh-TW/approve_user.po
index 76b4a66f..35287850 100644
--- a/includes/i18n/zh-TW/approve_user.po
+++ b/includes/i18n/zh-TW/approve_user.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/approve_user.po\n"
-"PO-Revision-Date: 2019-06-01 08:34\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# Displayed if the user for whom the link was created visits the page.
msgid "approve_user.user.title"
diff --git a/includes/i18n/zh-TW/awaiting_approval.po b/includes/i18n/zh-TW/awaiting_approval.po
index 3d065ca7..d8f3465d 100644
--- a/includes/i18n/zh-TW/awaiting_approval.po
+++ b/includes/i18n/zh-TW/awaiting_approval.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/awaiting_approval.po\n"
-"PO-Revision-Date: 2019-05-31 01:34\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "awaiting_approval.title"
msgstr "待需審批"
diff --git a/includes/i18n/zh-TW/category.po b/includes/i18n/zh-TW/category.po
index c4e7a2a2..d8006a77 100644
--- a/includes/i18n/zh-TW/category.po
+++ b/includes/i18n/zh-TW/category.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/category.po\n"
-"PO-Revision-Date: 2019-05-31 09:26\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# Label for objectives which are currently in-game (e.g. monthly, event, etc.)
msgid "category.objective.current"
diff --git a/includes/i18n/zh-TW/clustering.po b/includes/i18n/zh-TW/clustering.po
index f2e3caf0..25c29884 100644
--- a/includes/i18n/zh-TW/clustering.po
+++ b/includes/i18n/zh-TW/clustering.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/clustering.po\n"
-"PO-Revision-Date: 2019-06-03 06:05\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# %1 = Number of POIs hidden from map
# %2 = Total number of POIs that are supposed to be visible in the map view
diff --git a/includes/i18n/zh-TW/generation.po b/includes/i18n/zh-TW/generation.po
index 7c89dd65..31a38b9b 100644
--- a/includes/i18n/zh-TW/generation.po
+++ b/includes/i18n/zh-TW/generation.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/generation.po\n"
-"PO-Revision-Date: 2019-05-31 02:14\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "generation.1.label"
msgstr "一代"
diff --git a/includes/i18n/zh-TW/geo.po b/includes/i18n/zh-TW/geo.po
index 6dc53860..8380dd01 100644
--- a/includes/i18n/zh-TW/geo.po
+++ b/includes/i18n/zh-TW/geo.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/geo.po\n"
-"PO-Revision-Date: 2019-06-03 06:05\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# This string determines how coordinate strings are displayed (consider the
# order of the coordinates, whether there should be a comma, etc.)
diff --git a/includes/i18n/zh-TW/group.po b/includes/i18n/zh-TW/group.po
index e5512f66..66de22d4 100644
--- a/includes/i18n/zh-TW/group.po
+++ b/includes/i18n/zh-TW/group.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/group.po\n"
-"PO-Revision-Date: 2019-06-03 05:34\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "group.selector.current"
msgstr "當前用戶組"
diff --git a/includes/i18n/zh-TW/install.po b/includes/i18n/zh-TW/install.po
index 4b2a1d79..18b0515e 100644
--- a/includes/i18n/zh-TW/install.po
+++ b/includes/i18n/zh-TW/install.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/install.po\n"
-"PO-Revision-Date: 2019-06-03 06:00\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "install.button.continue"
msgstr "繼續安裝"
diff --git a/includes/i18n/zh-TW/language.po b/includes/i18n/zh-TW/language.po
index 6b5d9528..89316808 100644
--- a/includes/i18n/zh-TW/language.po
+++ b/includes/i18n/zh-TW/language.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/language.po\n"
-"PO-Revision-Date: 2019-06-01 14:16\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# The name of the language and country in English (e.g. "French (France)", "Spanish (Spain)")
msgid "language.name_english"
diff --git a/includes/i18n/zh-TW/login.po b/includes/i18n/zh-TW/login.po
index 992dbf4a..dab4e7c3 100644
--- a/includes/i18n/zh-TW/login.po
+++ b/includes/i18n/zh-TW/login.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login.po\n"
-"PO-Revision-Date: 2019-05-31 01:25\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "login.title"
msgstr "登陸FreeField"
diff --git a/includes/i18n/zh-TW/login_failed.po b/includes/i18n/zh-TW/login_failed.po
index d6660004..c4f19a70 100644
--- a/includes/i18n/zh-TW/login_failed.po
+++ b/includes/i18n/zh-TW/login_failed.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/login_failed.po\n"
-"PO-Revision-Date: 2019-05-31 01:25\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "login_failed.title"
msgstr "登錄失敗"
diff --git a/includes/i18n/zh-TW/mobile.po b/includes/i18n/zh-TW/mobile.po
index 231a9b45..e6ca0f53 100644
--- a/includes/i18n/zh-TW/mobile.po
+++ b/includes/i18n/zh-TW/mobile.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/mobile.po\n"
-"PO-Revision-Date: 2019-05-31 02:14\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "mobile.pwa.connecting"
msgstr "連線中"
diff --git a/includes/i18n/zh-TW/motd.po b/includes/i18n/zh-TW/motd.po
index 9aa5cc13..6a0d11b0 100644
--- a/includes/i18n/zh-TW/motd.po
+++ b/includes/i18n/zh-TW/motd.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/motd.po\n"
-"PO-Revision-Date: 2019-05-31 02:14\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "motd.title"
msgstr "今日消息"
diff --git a/includes/i18n/zh-TW/multi.po b/includes/i18n/zh-TW/multi.po
index cd2fabc7..e34a4aae 100644
--- a/includes/i18n/zh-TW/multi.po
+++ b/includes/i18n/zh-TW/multi.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/multi.po\n"
-"PO-Revision-Date: 2019-06-01 07:24\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# This string is a string displayed for type tasks. E.g. "Water-type" in "Catch
# 3 Water-type Pokémon."
diff --git a/includes/i18n/zh-TW/objective.po b/includes/i18n/zh-TW/objective.po
index d9eeba5c..ec8a2d63 100644
--- a/includes/i18n/zh-TW/objective.po
+++ b/includes/i18n/zh-TW/objective.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/objective.po\n"
-"PO-Revision-Date: 2019-06-05 14:58\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "objective.battle_gym.singular"
msgstr "參加1次道館對戰"
diff --git a/includes/i18n/zh-TW/page_title.po b/includes/i18n/zh-TW/page_title.po
index 64625d61..b462d8ac 100644
--- a/includes/i18n/zh-TW/page_title.po
+++ b/includes/i18n/zh-TW/page_title.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/page_title.po\n"
-"PO-Revision-Date: 2019-05-31 02:14\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "page_title.setup"
msgstr "安裝FreeField"
diff --git a/includes/i18n/zh-TW/parameter.po b/includes/i18n/zh-TW/parameter.po
index df9248e4..76f89a51 100644
--- a/includes/i18n/zh-TW/parameter.po
+++ b/includes/i18n/zh-TW/parameter.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/parameter.po\n"
-"PO-Revision-Date: 2019-05-31 09:37\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# This is used in the objective and reward drop-down menus in the research
# reporting dialog when additional data must be specified for the selected
diff --git a/includes/i18n/zh-TW/poi.po b/includes/i18n/zh-TW/poi.po
index 55337e06..1f25c8e7 100644
--- a/includes/i18n/zh-TW/poi.po
+++ b/includes/i18n/zh-TW/poi.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/poi.po\n"
-"PO-Revision-Date: 2019-05-31 01:58\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
# %1 = Last updated date/time
msgid "poi.last.time"
diff --git a/includes/i18n/zh-TW/release_type.po b/includes/i18n/zh-TW/release_type.po
index 515864be..aeceb21a 100644
--- a/includes/i18n/zh-TW/release_type.po
+++ b/includes/i18n/zh-TW/release_type.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/release_type.po\n"
-"PO-Revision-Date: 2019-06-01 07:44\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "release_type.stable.name"
msgstr "穩定版"
diff --git a/includes/i18n/zh-TW/reward.po b/includes/i18n/zh-TW/reward.po
index ae7ff272..ff9f9c62 100644
--- a/includes/i18n/zh-TW/reward.po
+++ b/includes/i18n/zh-TW/reward.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/reward.po\n"
-"PO-Revision-Date: 2019-05-31 09:19\n"
+"PO-Revision-Date: 2019-06-05 22:25\n"
msgid "reward.poke_ball.general"
msgstr "精靈球"
diff --git a/includes/i18n/zh-TW/setting.po b/includes/i18n/zh-TW/setting.po
index 8618db45..8b404422 100644
--- a/includes/i18n/zh-TW/setting.po
+++ b/includes/i18n/zh-TW/setting.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/setting.po\n"
-"PO-Revision-Date: 2019-06-04 15:26\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "setting.site.uri.name"
msgstr "安裝網址"
diff --git a/includes/i18n/zh-TW/sidebar.po b/includes/i18n/zh-TW/sidebar.po
index d10e5693..03f68387 100644
--- a/includes/i18n/zh-TW/sidebar.po
+++ b/includes/i18n/zh-TW/sidebar.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/sidebar.po\n"
-"PO-Revision-Date: 2019-06-05 01:45\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "sidebar.signed_in_as"
msgstr "登陸賬戶"
diff --git a/includes/i18n/zh-TW/species.po b/includes/i18n/zh-TW/species.po
index c21fb7f3..b1995f9d 100644
--- a/includes/i18n/zh-TW/species.po
+++ b/includes/i18n/zh-TW/species.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/species.po\n"
-"PO-Revision-Date: 2019-06-05 14:58\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# Note: These should only be translated if an official translation exists for
# these species in the language you are translating to. E.g. in German, the
diff --git a/includes/i18n/zh-TW/theme.po b/includes/i18n/zh-TW/theme.po
index 89596b3c..d3919823 100644
--- a/includes/i18n/zh-TW/theme.po
+++ b/includes/i18n/zh-TW/theme.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/theme.po\n"
-"PO-Revision-Date: 2019-06-03 06:05\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
# This string is used to display the name and author of each installed icon set
# in the icon set drop-down selector. Example: "John's Amazing Map Markers (by
diff --git a/includes/i18n/zh-TW/type.po b/includes/i18n/zh-TW/type.po
index 27a0ef9c..724fb00f 100644
--- a/includes/i18n/zh-TW/type.po
+++ b/includes/i18n/zh-TW/type.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/type.po\n"
-"PO-Revision-Date: 2019-06-05 14:58\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "type.normal"
msgstr "一般"
diff --git a/includes/i18n/zh-TW/ui.po b/includes/i18n/zh-TW/ui.po
index b1e78d43..5b2ffb95 100644
--- a/includes/i18n/zh-TW/ui.po
+++ b/includes/i18n/zh-TW/ui.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/ui.po\n"
-"PO-Revision-Date: 2019-06-03 05:34\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "ui.button.close"
msgstr "關閉"
diff --git a/includes/i18n/zh-TW/user_setting.po b/includes/i18n/zh-TW/user_setting.po
index efb84e59..7061ae59 100644
--- a/includes/i18n/zh-TW/user_setting.po
+++ b/includes/i18n/zh-TW/user_setting.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_setting.po\n"
-"PO-Revision-Date: 2019-06-05 14:58\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "user_setting.nickname.name"
msgstr "暱稱"
diff --git a/includes/i18n/zh-TW/user_settings.po b/includes/i18n/zh-TW/user_settings.po
index 6aadb913..5dd5c046 100644
--- a/includes/i18n/zh-TW/user_settings.po
+++ b/includes/i18n/zh-TW/user_settings.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/user_settings.po\n"
-"PO-Revision-Date: 2019-06-01 08:14\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "user_settings.no_local_storage"
msgstr "警告:你的瀏覽器不支持本地存儲!你將不能定制你的FreeField外觀,並且地圖不會為你保存下次訪問時使用的最後查看地址。這很有可能是因為你使用了過時的瀏覽器。為了能夠體驗到完整的FreeField,在此強烈建議你使用一個現代的網頁瀏覽器。"
diff --git a/includes/i18n/zh-TW/webhook.po b/includes/i18n/zh-TW/webhook.po
index e25f57b0..5a755743 100644
--- a/includes/i18n/zh-TW/webhook.po
+++ b/includes/i18n/zh-TW/webhook.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/webhook.po\n"
-"PO-Revision-Date: 2019-06-01 08:24\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "webhook.report_title"
msgstr "任務已上傳!"
diff --git a/includes/i18n/zh-TW/xhr.po b/includes/i18n/zh-TW/xhr.po
index 982f4448..82e53d56 100644
--- a/includes/i18n/zh-TW/xhr.po
+++ b/includes/i18n/zh-TW/xhr.po
@@ -13,7 +13,7 @@ msgstr ""
"X-Crowdin-Project: freefield\n"
"X-Crowdin-Language: zh-TW\n"
"X-Crowdin-File: /master/includes/i18n/en-US/xhr.po\n"
-"PO-Revision-Date: 2019-05-31 02:14\n"
+"PO-Revision-Date: 2019-06-05 22:26\n"
msgid "xhr.failed.reason.unknown_reason"
msgstr "未知原因"