refactor: i18n SEO

This commit is contained in:
liyasthomas
2021-08-16 22:02:18 +05:30
parent e5c8d05850
commit c04435108b
22 changed files with 185 additions and 144 deletions

View File

@@ -35,7 +35,7 @@
:key="`map-${mapIndex}`" :key="`map-${mapIndex}`"
> >
<h5 class="my-2 text-secondaryLight py-2 px-4"> <h5 class="my-2 text-secondaryLight py-2 px-4">
{{ map.section }} {{ $t(map.section) }}
</h5> </h5>
<div <div
v-for="(shortcut, shortcutIndex) in map.shortcuts" v-for="(shortcut, shortcutIndex) in map.shortcuts"

View File

@@ -59,7 +59,7 @@
class="space-y-4 py-4 px-6" class="space-y-4 py-4 px-6"
> >
<h5 class="font-semibold text-secondaryDark"> <h5 class="font-semibold text-secondaryDark">
{{ map.section }} {{ $t(map.section) }}
</h5> </h5>
<div <div
v-for="(shortcut, shortcutIndex) in map.shortcuts" v-for="(shortcut, shortcutIndex) in map.shortcuts"

View File

@@ -3,13 +3,13 @@
<SmartTabs :id="'collections_tab'" @tab-changed="updateCollectionsType"> <SmartTabs :id="'collections_tab'" @tab-changed="updateCollectionsType">
<SmartTab <SmartTab
:id="'my-collections'" :id="'my-collections'"
:label="'My Collections'" :label="$t('collection.my_collections')"
:selected="true" :selected="true"
/> />
<SmartTab <SmartTab
v-if="currentUser && currentUser.eaInvited && !doc" v-if="currentUser && currentUser.eaInvited && !doc"
:id="'team-collections'" :id="'team-collections'"
:label="'Team Collections'" :label="$t('collection.team_collections')"
> >
<SmartIntersection @intersecting="onTeamSelectIntersect"> <SmartIntersection @intersecting="onTeamSelectIntersect">
<div class="select-wrapper"> <div class="select-wrapper">
@@ -36,7 +36,7 @@
disabled disabled
selected selected
> >
Select team {{ $t("collection.select_team") }}
</option> </option>
<option <option
v-for="(team, index) in myTeams" v-for="(team, index) in myTeams"

View File

@@ -1,5 +1,5 @@
<template> <template>
<SmartModal v-if="show" :title="$t('new_environment')" @close="hideModal"> <SmartModal v-if="show" :title="$t('environment.new')" @close="hideModal">
<template #body> <template #body>
<div class="flex flex-col px-2"> <div class="flex flex-col px-2">
<input <input
@@ -41,7 +41,7 @@ export default Vue.extend({
methods: { methods: {
addNewEnvironment() { addNewEnvironment() {
if (!this.name) { if (!this.name) {
this.$toast.info(this.$t("invalid_environment_name").toString(), { this.$toast.info(this.$t("environment.invalid_name").toString(), {
icon: "info", icon: "info",
}) })
return return

View File

@@ -1,5 +1,5 @@
<template> <template>
<SmartModal v-if="show" :title="$t('edit_environment')" @close="hideModal"> <SmartModal v-if="show" :title="$t('environment.edit')" @close="hideModal">
<template #body> <template #body>
<div class="flex flex-col px-2"> <div class="flex flex-col px-2">
<div class="flex relative"> <div class="flex relative">
@@ -18,7 +18,7 @@
</div> </div>
<div class="flex flex-1 justify-between items-center"> <div class="flex flex-1 justify-between items-center">
<label for="variableList" class="p-4"> <label for="variableList" class="p-4">
{{ $t("env_variable_list") }} {{ $t("environment.variable_list") }}
</label> </label>
<div class="flex"> <div class="flex">
<ButtonSecondary <ButtonSecondary
@@ -164,7 +164,7 @@ export default defineComponent({
}, },
saveEnvironment() { saveEnvironment() {
if (!this.name) { if (!this.name) {
this.$toast.info(this.$t("invalid_environment_name").toString(), { this.$toast.info(this.$t("environment.invalid_name").toString(), {
icon: "info", icon: "info",
}) })
return return

View File

@@ -1,7 +1,7 @@
<template> <template>
<SmartModal <SmartModal
v-if="show" v-if="show"
:title="`${$t('modal.import_export')} ${$t('environments')}`" :title="`${$t('modal.import_export')} ${$t('environment.title')}`"
@close="hideModal" @close="hideModal"
> >
<template #actions> <template #actions>

View File

@@ -1,5 +1,5 @@
<template> <template>
<AppSection label="environments"> <AppSection :label="$t('environment.title')">
<div <div
class=" class="
bg-primary bg-primary
@@ -25,9 +25,9 @@
focus:outline-none focus:outline-none
" "
> >
<option :value="-1">No environment</option> <option :value="-1">{{ $t("environment.no_environment") }}</option>
<option v-if="environments.length === 0" value="0"> <option v-if="environments.length === 0" value="0">
{{ $t("create_new_environment") }} {{ $t("environment.create_new") }}
</option> </option>
<option <option
v-for="(environment, index) in environments" v-for="(environment, index) in environments"

View File

@@ -10,18 +10,18 @@
<SmartItem <SmartItem
:loading="signingInWithGoogle" :loading="signingInWithGoogle"
svg="google" svg="google"
label="Continue with Google" :label="$t('auth.continue_with_google')"
@click.native="signInWithGoogle" @click.native="signInWithGoogle"
/> />
<SmartItem <SmartItem
:loading="signingInWithGitHub" :loading="signingInWithGitHub"
svg="github" svg="github"
label="Continue with GitHub" :label="$t('auth.continue_with_github')"
@click.native="signInWithGithub" @click.native="signInWithGithub"
/> />
<SmartItem <SmartItem
icon="mail" icon="mail"
label="Continue with Email" :label="$t('auth.continue_with_email')"
@click.native="mode = 'email'" @click.native="mode = 'email'"
/> />
</div> </div>
@@ -95,7 +95,7 @@
<p v-if="mode === 'email'" class="text-secondaryLight"> <p v-if="mode === 'email'" class="text-secondaryLight">
<SmartAnchor <SmartAnchor
class="link" class="link"
label="← All sign in options" :label="`${$t('auth.all_sign_in_options')}`"
@click.native="mode = 'sign-in'" @click.native="mode = 'sign-in'"
/> />
</p> </p>
@@ -105,7 +105,7 @@
> >
<SmartAnchor <SmartAnchor
class="link" class="link"
label="← Re-enter email" :label="`${$t('auth.re_enter_email')}`"
@click.native="mode = 'email'" @click.native="mode = 'email'"
/> />
<SmartAnchor <SmartAnchor

View File

@@ -4,7 +4,7 @@
v-for="(color, index) of colors" v-for="(color, index) of colors"
:key="`color-${index}`" :key="`color-${index}`"
v-tippy="{ theme: 'tooltip' }" v-tippy="{ theme: 'tooltip' }"
:title="`${color.charAt(0).toUpperCase()}${color.slice(1)}`" :title="$t(getColorModeName(color))"
:class="{ :class="{
'bg-primaryLight !text-accent hover:text-accent': color === active, 'bg-primaryLight !text-accent hover:text-accent': color === active,
}" }"
@@ -49,6 +49,20 @@ export default defineComponent({
return "devices" return "devices"
} }
}, },
getColorModeName(colorMode: string) {
switch (colorMode) {
case "system":
return "settings.system_mode"
case "light":
return "settings.light_mode"
case "dark":
return "settings.dark_mode"
case "black":
return "settings.black_mode"
default:
return "settings.system_mode"
}
},
}, },
}) })
</script> </script>

View File

@@ -4,9 +4,12 @@
{{ $t("team.title") }} {{ $t("team.title") }}
</h4> </h4>
<div class="mt-1 text-secondaryLight"> <div class="mt-1 text-secondaryLight">
Join <SmartAnchor
<SmartAnchor label="beta" to="https://hoppscotch.io/beta" blank /> :label="$t('team.join_beta')"
to access teams. to="https://hoppscotch.io/beta"
blank
class="link"
/>
</div> </div>
<div class="space-y-4 mt-4"> <div class="space-y-4 mt-4">
<ButtonSecondary <ButtonSecondary

View File

@@ -2,7 +2,7 @@ import { getPlatformAlternateKey, getPlatformSpecialKey } from "./platformutils"
export default [ export default [
{ {
section: "General", section: "shortcut.general.title",
shortcuts: [ shortcuts: [
{ {
keys: ["?"], keys: ["?"],
@@ -23,56 +23,56 @@ export default [
], ],
}, },
{ {
section: "Request", section: "shortcut.request.title",
shortcuts: [ shortcuts: [
{ {
keys: [getPlatformSpecialKey(), "G"], keys: [getPlatformSpecialKey(), "G"],
label: "shortcut.send_request", label: "shortcut.request.send_request",
}, },
{ {
keys: [getPlatformSpecialKey(), "S"], keys: [getPlatformSpecialKey(), "S"],
label: "shortcut.save_to_collections", label: "shortcut.request.save_to_collections",
}, },
{ {
keys: [getPlatformSpecialKey(), "C"], keys: [getPlatformSpecialKey(), "C"],
label: "shortcut.copy_request_link", label: "shortcut.request.copy_request_link",
}, },
{ {
keys: [getPlatformSpecialKey(), "I"], keys: [getPlatformSpecialKey(), "I"],
label: "shortcut.reset_request", label: "shortcut.request.reset_request",
}, },
{ {
keys: [getPlatformAlternateKey(), "↑"], keys: [getPlatformAlternateKey(), "↑"],
label: "shortcut.next_method", label: "shortcut.request.next_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "↓"], keys: [getPlatformAlternateKey(), "↓"],
label: "shortcut.previous_method", label: "shortcut.request.previous_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "G"], keys: [getPlatformAlternateKey(), "G"],
label: "shortcut.get_method", label: "shortcut.request.get_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "H"], keys: [getPlatformAlternateKey(), "H"],
label: "shortcut.head_method", label: "shortcut.request.head_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "P"], keys: [getPlatformAlternateKey(), "P"],
label: "shortcut.post_method", label: "shortcut.request.post_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "U"], keys: [getPlatformAlternateKey(), "U"],
label: "shortcut.put_method", label: "shortcut.request.put_method",
}, },
{ {
keys: [getPlatformAlternateKey(), "X"], keys: [getPlatformAlternateKey(), "X"],
label: "shortcut.delete_method", label: "shortcut.request.delete_method",
}, },
], ],
}, },
{ {
section: "Navigation", section: "shortcut.navigation.title",
shortcuts: [ shortcuts: [
{ {
keys: [getPlatformSpecialKey(), "←"], keys: [getPlatformSpecialKey(), "←"],
@@ -105,7 +105,7 @@ export default [
], ],
}, },
{ {
section: "Miscellaneous", section: "shortcut.miscellaneous.title",
shortcuts: [ shortcuts: [
{ {
keys: [getPlatformSpecialKey(), "M"], keys: [getPlatformSpecialKey(), "M"],
@@ -117,7 +117,7 @@ export default [
export const spotlight = [ export const spotlight = [
{ {
section: "Spotlight", section: "app.spotlight",
shortcuts: [ shortcuts: [
{ {
keys: ["?"], keys: ["?"],
@@ -148,7 +148,7 @@ export const spotlight = [
], ],
}, },
{ {
section: "Navigation", section: "shortcut.navigation.title",
shortcuts: [ shortcuts: [
{ {
keys: [getPlatformSpecialKey(), "←"], keys: [getPlatformSpecialKey(), "←"],
@@ -220,7 +220,7 @@ export const spotlight = [
], ],
}, },
{ {
section: "Miscellaneous", section: "shortcut.miscellaneous.title",
shortcuts: [ shortcuts: [
{ {
keys: [getPlatformSpecialKey(), "M"], keys: [getPlatformSpecialKey(), "M"],

View File

@@ -3,210 +3,181 @@
"code": "af", "code": "af",
"name": "Afrikaans", "name": "Afrikaans",
"iso": "af-AF", "iso": "af-AF",
"file": "af.json", "file": "af.json"
"country": "AF"
}, },
{ {
"code": "ar", "code": "ar",
"name": "عربى", "name": "عربى",
"iso": "ar-AR", "iso": "ar-AR",
"file": "ar.json", "file": "ar.json",
"country": "AR" "dir": "rtl"
}, },
{ {
"code": "ca", "code": "ca",
"name": "Català", "name": "Català",
"iso": "ca-CA", "iso": "ca-CA",
"file": "ca.json", "file": "ca.json"
"country": "CA"
}, },
{ {
"code": "cs", "code": "cs",
"name": "Čeština", "name": "Čeština",
"iso": "cs-CS", "iso": "cs-CS",
"file": "cs.json", "file": "cs.json"
"country": "CS"
}, },
{ {
"code": "da", "code": "da",
"name": "Dansk", "name": "Dansk",
"iso": "da-DA", "iso": "da-DA",
"file": "da.json", "file": "da.json"
"country": "DA"
}, },
{ {
"code": "de", "code": "de",
"name": "Deutsch", "name": "Deutsch",
"iso": "de-DE", "iso": "de-DE",
"file": "de.json", "file": "de.json"
"country": "DE"
}, },
{ {
"code": "el", "code": "el",
"name": "Ελληνικά", "name": "Ελληνικά",
"iso": "el-EL", "iso": "el-EL",
"file": "el.json", "file": "el.json"
"country": "EL"
}, },
{ {
"code": "en", "code": "en",
"name": "English", "name": "English",
"iso": "en-US", "iso": "en-US",
"file": "en.json", "file": "en.json"
"country": "US"
}, },
{ {
"code": "es", "code": "es",
"name": "Español", "name": "Español",
"iso": "es-ES", "iso": "es-ES",
"file": "es.json", "file": "es.json"
"country": "ES"
}, },
{ {
"code": "fi", "code": "fi",
"name": "Suomalainen", "name": "Suomalainen",
"iso": "fi-FI", "iso": "fi-FI",
"file": "fi.json", "file": "fi.json"
"country": "FI"
}, },
{ {
"code": "fr", "code": "fr",
"name": "Français", "name": "Français",
"iso": "fr-FR", "iso": "fr-FR",
"file": "fr.json", "file": "fr.json"
"country": "FR"
}, },
{ {
"code": "he", "code": "he",
"name": "עִברִית", "name": "עִברִית",
"iso": "he-HE", "iso": "he-HE",
"file": "he.json", "file": "he.json"
"country": "HE"
}, },
{ {
"code": "hu", "code": "hu",
"name": "Magyar", "name": "Magyar",
"iso": "hu-HU", "iso": "hu-HU",
"file": "hu.json", "file": "hu.json"
"country": "HU"
}, },
{ {
"code": "it", "code": "it",
"name": "Italiano", "name": "Italiano",
"iso": "it", "iso": "it",
"file": "it.json", "file": "it.json"
"country": "IT"
}, },
{ {
"code": "ja", "code": "ja",
"name": "日本人", "name": "日本人",
"iso": "ja-JA", "iso": "ja-JA",
"file": "ja.json", "file": "ja.json"
"country": "JA"
}, },
{ {
"code": "ko", "code": "ko",
"name": "한국어", "name": "한국어",
"iso": "ko-KO", "iso": "ko-KO",
"file": "ko.json", "file": "ko.json"
"country": "KO"
}, },
{ {
"code": "nl", "code": "nl",
"name": "Nederlands", "name": "Nederlands",
"iso": "nl-NL", "iso": "nl-NL",
"file": "nl.json", "file": "nl.json"
"country": "NL"
}, },
{ {
"code": "no", "code": "no",
"name": "Norsk", "name": "Norsk",
"iso": "no-NO", "iso": "no-NO",
"file": "no.json", "file": "no.json"
"country": "NO"
}, },
{ {
"code": "pl", "code": "pl",
"name": "Polskie", "name": "Polskie",
"iso": "pl-PL", "iso": "pl-PL",
"file": "pl.json", "file": "pl.json"
"country": "PL"
}, },
{ {
"code": "pt-br", "code": "pt-br",
"name": "Português Brasileiro", "name": "Português Brasileiro",
"iso": "pt-BR", "iso": "pt-BR",
"file": "pt-br.json", "file": "pt-br.json"
"country": "BR"
}, },
{ {
"code": "pt", "code": "pt",
"name": "Português", "name": "Português",
"iso": "pt-PT", "iso": "pt-PT",
"file": "pt.json", "file": "pt.json"
"country": "PT"
}, },
{ {
"code": "ro", "code": "ro",
"name": "Română", "name": "Română",
"iso": "ro-RO", "iso": "ro-RO",
"file": "ro.json", "file": "ro.json"
"country": "RO"
}, },
{ {
"code": "ru", "code": "ru",
"name": "Pусский", "name": "Pусский",
"iso": "ru-RU", "iso": "ru-RU",
"file": "ru.json", "file": "ru.json"
"country": "RU"
}, },
{ {
"code": "sr", "code": "sr",
"name": "Српски", "name": "Српски",
"iso": "sr-SR", "iso": "sr-SR",
"file": "sr.json", "file": "sr.json"
"country": "SR"
}, },
{ {
"code": "sv", "code": "sv",
"name": "Svenska", "name": "Svenska",
"iso": "sv-SV", "iso": "sv-SV",
"file": "sv.json", "file": "sv.json"
"country": "SV"
}, },
{ {
"code": "tr", "code": "tr",
"name": "Türk", "name": "Türk",
"iso": "tr-TR", "iso": "tr-TR",
"file": "tr.json", "file": "tr.json"
"country": "TR"
}, },
{ {
"code": "uk", "code": "uk",
"name": "Українська", "name": "Українська",
"iso": "uk-UK", "iso": "uk-UK",
"file": "uk.json", "file": "uk.json"
"country": "UK"
}, },
{ {
"code": "vi", "code": "vi",
"name": "Tiếng Việt", "name": "Tiếng Việt",
"iso": "vi-VI", "iso": "vi-VI",
"file": "vi.json", "file": "vi.json"
"country": "VI"
}, },
{ {
"code": "zh-tw", "code": "tw",
"name": "中國傳統的", "name": "中國傳統的",
"iso": "zh-TW", "iso": "zh-TW",
"file": "zh-tw.json", "file": "tw.json"
"country": "TW"
}, },
{ {
"code": "zh", "code": "cn",
"name": "简体中文", "name": "简体中文",
"iso": "zh-CN", "iso": "zh-CN",
"file": "zh.json", "file": "cn.json"
"country": "CN"
} }
] ]

View File

@@ -124,6 +124,9 @@ export default defineComponent({
windowInnerWidth: 0, windowInnerWidth: 0,
} }
}, },
head() {
return this.$nuxtI18nHead({ addSeoAttributes: true })
},
watch: { watch: {
$route(to) { $route(to) {
logPageView(to.fullPath) logPageView(to.fullPath)

View File

@@ -101,9 +101,13 @@
"share": "Share", "share": "Share",
"copy": "Copy", "copy": "Copy",
"search": "Search", "search": "Search",
"type_a_command_search": "Type a command or search…" "type_a_command_search": "Type a command or search…",
"spotlight": "Spotlight"
}, },
"collection": { "collection": {
"my_collections": "My Collections",
"team_collections": "Team Collections",
"select_team": "Select a team",
"save_as": "Save as", "save_as": "Save as",
"select_location": "Select location", "select_location": "Select location",
"select": "Select a Collection", "select": "Select a Collection",
@@ -121,6 +125,7 @@
}, },
"team": { "team": {
"title": "Teams", "title": "Teams",
"join_beta": "Join the beta program to access teams.",
"exit": "Exit Team", "exit": "Exit Team",
"name_length_insufficient": "Team name should be atleast 6 characters long", "name_length_insufficient": "Team name should be atleast 6 characters long",
"invalid_email_format": "Email format is invalid", "invalid_email_format": "Email format is invalid",
@@ -162,7 +167,13 @@
"gist_created": "Gist created" "gist_created": "Gist created"
}, },
"auth": { "auth": {
"login": "Login",
"continue_with_google": "Continue with Google",
"continue_with_github": "Continue with GitHub",
"continue_with_email": "Continue with Email",
"email": "Email", "email": "Email",
"all_sign_in_options": "All sign in options",
"re_enter_email": "Re-enter email",
"account_exists": "Account exists with different credential - Login to link both accounts", "account_exists": "Account exists with different credential - Login to link both accounts",
"send_magic_link": "Send a magic link", "send_magic_link": "Send a magic link",
"we_sent_magic_link": "We sent you a magic link!", "we_sent_magic_link": "We sent you a magic link!",
@@ -184,6 +195,7 @@
"unsubscribe": "Unsubscribe" "unsubscribe": "Unsubscribe"
}, },
"request": { "request": {
"title": "Request",
"copy_link": "Copy link", "copy_link": "Copy link",
"save": "Save", "save": "Save",
"save_as": "Save as", "save_as": "Save as",
@@ -194,9 +206,21 @@
"share": "Share" "share": "Share"
}, },
"settings": { "settings": {
"account_description": "Customize your account settings.",
"theme_description": "Customize your application theme.",
"user": "User",
"account_name_description": "This is your display name.",
"account_email_description": "Your primary email address.",
"interceptor_description": "Middleware between application and APIs.",
"sync_description": "These settings are synced to cloud.",
"sync": "Synchronise",
"shortcuts_indicator": "Shortcuts indicator", "shortcuts_indicator": "Shortcuts indicator",
"telemetry": "Telemetry", "telemetry": "Telemetry",
"interceptor": "Interceptor", "interceptor": "Interceptor",
"system_mode": "System",
"light_mode": "Light",
"dark_mode": "Dark",
"black_mode": "Black",
"navigation_sidebar": "Navigation sidebar", "navigation_sidebar": "Navigation sidebar",
"font_size": "Font size", "font_size": "Font size",
"font_size_small": "Small", "font_size_small": "Small",
@@ -226,12 +250,14 @@
}, },
"shortcut": { "shortcut": {
"general": { "general": {
"title": "General",
"help_menu": "Help menu", "help_menu": "Help menu",
"show_all": "Keyboard shortcuts", "show_all": "Keyboard shortcuts",
"command_menu": "Search & command menu", "command_menu": "Search & command menu",
"close_current_menu": "Close current menu" "close_current_menu": "Close current menu"
}, },
"navigation": { "navigation": {
"title": "Navigation",
"rest": "Go to REST page", "rest": "Go to REST page",
"graphql": "Go to GraphQL page", "graphql": "Go to GraphQL page",
"realtime": "Go to Realtime page", "realtime": "Go to Realtime page",
@@ -241,8 +267,11 @@
"forward": "Go forward to next page" "forward": "Go forward to next page"
}, },
"miscellaneous": { "miscellaneous": {
"title": "Miscellaneous",
"invite": "Invite people to Hoppscotch" "invite": "Invite people to Hoppscotch"
}, },
"request": {
"title": "Request",
"send_request": "Send Request", "send_request": "Send Request",
"save_to_collections": "Save to Collections", "save_to_collections": "Save to Collections",
"copy_request_link": "Copy Request Link", "copy_request_link": "Copy Request Link",
@@ -254,6 +283,7 @@
"post_method": "Select POST method", "post_method": "Select POST method",
"put_method": "Select PUT method", "put_method": "Select PUT method",
"delete_method": "Select DELETE method" "delete_method": "Select DELETE method"
}
}, },
"error": { "error": {
"something_went_wrong": "Something went wrong", "something_went_wrong": "Something went wrong",
@@ -269,6 +299,15 @@
"tests": "Write a test script to automate debugging.", "tests": "Write a test script to automate debugging.",
"network_fail": "Unable to reach the API endpoint. Check your network connection and try again." "network_fail": "Unable to reach the API endpoint. Check your network connection and try again."
}, },
"environment": {
"title": "Environments",
"no_environment": "No environment",
"new": "New Environment",
"create_new": "Create new environment",
"edit": "Edit Environment",
"variable_list": "Variable List",
"invalid_name": "Please provide a valid name for the environment"
},
"options": "Options", "options": "Options",
"communication": "Communication", "communication": "Communication",
"endpoint": "Endpoint", "endpoint": "Endpoint",
@@ -295,12 +334,6 @@
"preview_html": "Preview HTML", "preview_html": "Preview HTML",
"history": "History", "history": "History",
"collections": "Collections", "collections": "Collections",
"environments": "Environments",
"new_environment": "New Environment",
"my_new_environment": "My New Environment",
"edit_environment": "Edit Environment",
"env_variable_list": "Variable List",
"invalid_environment_name": "Please provide a valid name for the environment",
"request_type": "Request type", "request_type": "Request type",
"status": "Status", "status": "Status",
"headers": "Headers", "headers": "Headers",
@@ -461,6 +494,5 @@
"socketio": "Socket.IO", "socketio": "Socket.IO",
"event_name": "Event Name", "event_name": "Event Name",
"pre_request_script": "Pre-request Script", "pre_request_script": "Pre-request Script",
"tests": "Tests", "tests": "Tests"
"create_new_environment": "Create new environment"
} }

View File

@@ -193,7 +193,7 @@ export default {
// Sitemap module configuration (https://github.com/nuxt-community/sitemap-module) // Sitemap module configuration (https://github.com/nuxt-community/sitemap-module)
sitemap: { sitemap: {
hostname: process.env.BASE_URL || "https://hoppscotch.io", hostname: process.env.BASE_URL,
}, },
// Robots module configuration (https://github.com/nuxt-community/robots-module) // Robots module configuration (https://github.com/nuxt-community/robots-module)
@@ -222,11 +222,12 @@ export default {
fallbackLocale: "en", fallbackLocale: "en",
}, },
lazy: true, lazy: true,
langDir: "lang/", langDir: "locales/",
detectBrowserLanguage: { detectBrowserLanguage: {
alwaysRedirect: true, alwaysRedirect: true,
fallbackLocale: "en", fallbackLocale: "en",
}, },
baseUrl: process.env.BASE_URL,
}, },
// Color mode configuration (https://github.com/nuxt-community/color-mode-module) // Color mode configuration (https://github.com/nuxt-community/color-mode-module)

View File

@@ -205,7 +205,7 @@ export default defineComponent({
}, },
head() { head() {
return { return {
title: `Documentation • Hoppscotch`, title: `${this.$t("navigation.doc")} • Hoppscotch`,
} }
}, },
methods: { methods: {

View File

@@ -60,7 +60,7 @@ export default defineComponent({
}, },
head() { head() {
return { return {
title: `GraphQL • Hoppscotch`, title: `${this.$t("navigation.graphql")} • Hoppscotch`,
} }
}, },
}) })

View File

@@ -64,7 +64,7 @@
<Collections /> <Collections />
</SmartTab> </SmartTab>
<SmartTab :id="'env'" :label="$t('environments')"> <SmartTab :id="'env'" :label="$t('environment.title')">
<Environments /> <Environments />
</SmartTab> </SmartTab>
</SmartTabs> </SmartTabs>

View File

@@ -39,7 +39,7 @@
export default { export default {
head() { head() {
return { return {
title: `Realtime • Hoppscotch`, title: `${this.$t("navigation.realtime")} • Hoppscotch`,
} }
}, },
} }

View File

@@ -7,17 +7,21 @@
{{ $t("account") }} {{ $t("account") }}
</h3> </h3>
<p class="mt-1 text-secondaryLight"> <p class="mt-1 text-secondaryLight">
Customize your account settings. {{ $t("settings.account_description") }}
</p> </p>
</div> </div>
<div class="p-8 md:col-span-2"> <div class="p-8 md:col-span-2">
<div v-if="currentUser === null"> <div v-if="currentUser === null">
<ButtonPrimary label="Log in" @click.native="showLogin = true" /> <ButtonPrimary
<div class="mt-4 text-secondaryLight">Log in to access.</div> :label="$t('auth.login')"
@click.native="showLogin = true"
/>
</div> </div>
<div v-else class="space-y-8"> <div v-else class="space-y-8">
<section> <section>
<h4 class="font-semibold text-secondaryDark">User</h4> <h4 class="font-semibold text-secondaryDark">
{{ $t("settings.user") }}
</h4>
<div class="space-y-4 py-4"> <div class="space-y-4 py-4">
<div class="flex items-start"> <div class="flex items-start">
<div class="flex items-center"> <div class="flex items-center">
@@ -33,7 +37,7 @@
{{ currentUser.displayName || $t("nothing_found") }} {{ currentUser.displayName || $t("nothing_found") }}
</label> </label>
<p class="mt-1 text-secondaryLight"> <p class="mt-1 text-secondaryLight">
This is your display name. {{ $t("settings.account_name_description") }}
</p> </p>
</div> </div>
</div> </div>
@@ -46,7 +50,7 @@
{{ currentUser.email || $t("nothing_found") }} {{ currentUser.email || $t("nothing_found") }}
</label> </label>
<p class="mt-1 text-secondaryLight"> <p class="mt-1 text-secondaryLight">
Your primary email address. {{ $t("settings.account_email_description") }}
</p> </p>
</div> </div>
</div> </div>
@@ -54,9 +58,11 @@
</section> </section>
<Teams v-if="currentBackendUser && currentBackendUser.eaInvited" /> <Teams v-if="currentBackendUser && currentBackendUser.eaInvited" />
<section> <section>
<h4 class="font-semibold text-secondaryDark">Sync</h4> <h4 class="font-semibold text-secondaryDark">
{{ $t("settings.sync") }}
</h4>
<div class="mt-1 text-secondaryLight"> <div class="mt-1 text-secondaryLight">
These settings are synced to cloud. {{ $t("settings.sync_description") }}
</div> </div>
<div class="space-y-4 py-4"> <div class="space-y-4 py-4">
<div class="flex items-center"> <div class="flex items-center">
@@ -99,7 +105,7 @@
{{ $t("theme") }} {{ $t("theme") }}
</h3> </h3>
<p class="mt-1 text-secondaryLight"> <p class="mt-1 text-secondaryLight">
Customize your application theme. {{ $t("settings.theme_description") }}
</p> </p>
</div> </div>
<div class="space-y-8 p-8 md:col-span-2"> <div class="space-y-8 p-8 md:col-span-2">
@@ -109,12 +115,9 @@
</h4> </h4>
<div class="mt-1 text-secondaryLight"> <div class="mt-1 text-secondaryLight">
<ColorScheme placeholder="..." tag="span"> <ColorScheme placeholder="..." tag="span">
{{ {{ $t(getColorModeName($colorMode.preference)) }}
$colorMode.preference.charAt(0).toUpperCase() +
$colorMode.preference.slice(1)
}}
<span v-if="$colorMode.preference === 'system'"> <span v-if="$colorMode.preference === 'system'">
({{ $colorMode.value }} mode detected) ({{ $t(getColorModeName($colorMode.value)) }})
</span> </span>
</ColorScheme> </ColorScheme>
</div> </div>
@@ -213,7 +216,7 @@
{{ $t("settings.interceptor") }} {{ $t("settings.interceptor") }}
</h3> </h3>
<p class="mt-1 text-secondaryLight"> <p class="mt-1 text-secondaryLight">
Middleware between application and APIs. {{ $t("settings.interceptor_description") }}
</p> </p>
</div> </div>
<div class="space-y-8 p-8 md:col-span-2"> <div class="space-y-8 p-8 md:col-span-2">
@@ -397,7 +400,7 @@ export default defineComponent({
}, },
head() { head() {
return { return {
title: `Settings • Hoppscotch`, title: `${this.$t("navigation.settings")} • Hoppscotch`,
} }
}, },
computed: { computed: {
@@ -452,6 +455,20 @@ export default defineComponent({
}) })
setTimeout(() => (this.clearIcon = "clear_all"), 1000) setTimeout(() => (this.clearIcon = "clear_all"), 1000)
}, },
getColorModeName(colorMode: string) {
switch (colorMode) {
case "system":
return "settings.system_mode"
case "light":
return "settings.light_mode"
case "dark":
return "settings.dark_mode"
case "black":
return "settings.black_mode"
default:
return "settings.system_mode"
}
},
}, },
}) })
</script> </script>