Skip to main content

Translation system

All user-visible strings in StartMyVPN are wrapped in {{ __('...') }} — Laravel’s localization helper. This means you can change any text either by:
  1. Editing the template directly — fastest for one-off changes
  2. Editing the language file — best when the same string appears in multiple places or when you support multiple languages
Language files live in lang/:
lang/
├── en.json          ← all translatable strings for English
├── en/
│   └── auth.php     ← Laravel's built-in auth messages
└── [locale].json    ← add a file here to add a new language

Edit the English language file

Open lang/en.json and change values:
{
    "Your Privacy,": "Your Security,",
    "Our Priority": "Our Mission",
    "7-Day Free Trial": "14-Day Free Trial",
    "30-Day Money Back": "30-Day Refund"
}
The key is the original English string; the value is what’s displayed. If no entry exists for a key, Laravel falls back to displaying the key itself — so both approaches work.

Add a new language

Create lang/[locale].json (e.g. lang/fr.json) with translated values:
{
    "Your Privacy,": "Votre vie privée,",
    "Our Priority": "Notre priorité",
    "Sign in": "Se connecter",
    "Sign up": "S'inscrire"
}
Then add the locale to config/app.php:
'available_locales' => ['en', 'fr'],
The language switcher in the navigation bar will automatically show the new option.

Landing page content

File: resources/views/landing.blade.php

Hero text

<h1>
    <span class="block">{{ __('Your Privacy,') }}</span>
    <span class="block text-secondary-400">{{ __('Our Priority') }}</span>
</h1>
<p>
    {{ __('Secure, fast, and anonymous VPN for all your devices...') }}
</p>
Update the strings in lang/en.json or edit the template directly.

Trust badges

Below the hero buttons:
<span>{{ __('No Credit Card Required') }}</span>
<span>{{ __('7-Day Free Trial') }}</span>
<span>{{ __('30-Day Money Back') }}</span>
Change these to match your actual offering (e.g. “14-Day Free Trial”).

Stats bar

<div class="text-4xl font-bold text-primary-900">50+</div>
<div class="text-sm text-gray-600">{{ __('Countries') }}</div>
Four stat blocks appear in this section. Update the numbers and labels directly in the template.

Feature cards

Six cards in the Features section. Each card has a title and description paragraph:
<h3>{{ __('Military-Grade Encryption') }}</h3>
<p>{{ __('AES-256 bit encryption protects your data...') }}</p>
To add a card, duplicate an existing <div class="bg-white p-8 rounded-xl..."> block and change the content. To remove a card, delete the block. The grid auto-adjusts (CSS grid-cols-1 md:grid-cols-2 lg:grid-cols-3).
<a href="#">Download for Android</a>
<a href="#">Download for iOS</a>
Replace the href="#" values with your real App Store / Google Play URLs.

Features page

File: resources/views/features.blade.php This is a dedicated feature showcase page. Edit the feature list, descriptions, and any comparison tables directly in the template.

Pricing page

File: resources/views/pricing.blade.php The pricing page dynamically loads plans from the database — you do not hardcode prices here. Plan names, prices, bandwidth limits, and features come from Admin → Plans. The template controls the visual layout of the pricing cards. To change the layout or add a custom “Most Popular” badge, edit this file.
The public navigation is in resources/views/components/layouts/public.blade.php.
<a href="{{ route('features') }}">{{ __('Features') }}</a>
<a href="{{ route('pricing') }}">{{ __('Pricing') }}</a>
<a href="{{ route('support') }}">{{ __('Support') }}</a>
To add a new link, add an <a> tag pointing to the relevant route. To remove a link, delete the <a> tag.

Sign in / Sign up button text

<a href="{{ route('login') }}">{{ __('Sign in') }}</a>
<a href="{{ route('register') }}">{{ __('Sign up') }}</a>
Change the text by updating the translation strings.
File: resources/views/components/footer.blade.php Edit this file to change:
  • Footer links and columns
  • Copyright notice and year
  • Social media links
  • Company description or tagline

Support page

File: resources/views/support.blade.php Contains the support landing page content. Edit it to add contact information, hours of availability, or links to external resources.

Auth page text

FilePage
resources/views/auth/login.blade.phpLogin
resources/views/auth/register.blade.phpRegistration
resources/views/auth/forgot-password.blade.phpForgot password
resources/views/auth/reset-password.blade.phpReset password
resources/views/auth/verify-email.blade.phpEmail verification
These pages use standard form layouts. Edit heading text, helper text, and button labels directly or via translation strings.

Email template content

Email body text is in resources/views/emails/. Each file corresponds to a transactional email:

Example: Service activation email

File: resources/views/emails/service-activated.blade.php
@component('mail::message')
# {{ __('Your VPN Service is Active!') }}

{{ __('Welcome! Your subscription is now active.') }}

@component('mail::button', ['url' => $dashboardUrl])
{{ __('Go to Dashboard') }}
@endcomponent

{{ __('Thanks,') }}<br>
{{ config('app.name') }}
@endcomponent
Edit the subject line in app/Mail/ServiceActivated.php:
public function envelope(): Envelope
{
    return new Envelope(
        subject: __('Your VPN service is now active'),
    );
}

Customer dashboard content

File: resources/views/dashboard.blade.php The dashboard displays the user’s active service, server list, and bandwidth usage. Edit this template to change:
  • Section headings and labels
  • Empty state messages (shown when no active service)
  • Help text and tooltips

After editing templates

No rebuild is needed for .blade.php changes — Laravel compiles them on request. However, clear the view cache if you have it enabled:
php artisan view:clear
For changes to lang/en.json or other language files, clear the config cache:
php artisan config:clear