PHP code example of teknyo / laravel-locale-helper

1. Go to this page and download the library: Download teknyo/laravel-locale-helper library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

teknyo / laravel-locale-helper example snippets


use Teknyo\LocaleHelper\Facades\LocaleHelper;

use Teknyo\LocaleHelper\Services\LocaleService;

public function __construct(protected LocaleService $locale) {}

// All languages (keyed by ISO 639-1 code)
$all = LocaleHelper::getLanguages();
// ['en' => ['name' => 'English', 'native' => 'English', 'rtl' => false], ...]

// Single language
LocaleHelper::getLanguage('fr');
// ['name' => 'French', 'native' => 'Français', 'rtl' => false]

// Simple name list for dropdowns
LocaleHelper::getLanguageNames();        // English names
LocaleHelper::getLanguageNames('native'); // Native names

// All timezones with offset metadata
LocaleHelper::getTimezones();

// Single timezone
LocaleHelper::getTimezone('America/New_York');
// ['identifier' => 'America/New_York', 'offset_label' => 'UTC-05:00', ...]

// Grouped by continent
LocaleHelper::getTimezonesGroupedByRegion();

// Ready for <select> dropdown
LocaleHelper::getTimezonesForSelect();

// All currencies
LocaleHelper::getCurrencies();

// Single currency
LocaleHelper::getCurrency('EUR');
// ['name' => 'Euro', 'symbol' => '€', 'decimals' => 2, 'symbol_first' => true]

// Just the symbol
LocaleHelper::getCurrencySymbol('GBP'); // '£'

// For dropdown
LocaleHelper::getCurrenciesForSelect();

// All formats with labels and examples
LocaleHelper::getDateFormats();

// For dropdown
LocaleHelper::getDateFormatsForSelect();

// Format a date
LocaleHelper::formatDate('2026-06-29', 'd/m/Y'); // '29/06/2026'
LocaleHelper::formatDate(now()); // uses config default

// Get configured day (0=Sun .. 6=Sat)
LocaleHelper::getFirstDayOfWeek(); // 1 (Monday)

// Change at runtime
LocaleHelper::setFirstDayOfWeek(0);

// Get day name
LocaleHelper::getFirstDayOfWeekName(); // 'Sunday'

// Get ordered days starting from configured first day
LocaleHelper::getDaysOfWeek();
// [0 => 'Sunday', 1 => 'Monday', ..., 6 => 'Saturday']

// Auto-detect from locale
LocaleHelper::resolveFirstDayOfWeekForLocale('ar_SA'); // 6 (Saturday)
LocaleHelper::resolveFirstDayOfWeekForLocale('en_US'); // 0 (Sunday)
LocaleHelper::resolveFirstDayOfWeekForLocale('de');    // 1 (Monday)

// Basic number
LocaleHelper::formatNumber(1234567.891);
// '1,234,567.89'

// Custom separators (European style)
LocaleHelper::formatNumber(1234567.89, 2, ',', '.');
// '1.234.567,89'

// Currency (uses intl if available)
LocaleHelper::formatCurrency(1234.5, 'USD', 'en_US'); // '$1,234.50'
LocaleHelper::formatCurrency(1234.5, 'EUR', 'de_DE'); // '1.234,50 €'

// Percentage
LocaleHelper::formatPercentage(85.456, 1); // '85.5%'

// Parse formatted number back to float
LocaleHelper::parseNumber('1,234,567.89'); // 1234567.89
LocaleHelper::parseNumber('1.234.567,89', ',', '.'); // 1234567.89

use Teknyo\LocaleHelper\Facades\CountryHelper;

// All countries
CountryHelper::getCountries();

// Single country
CountryHelper::getCountry('FR');
// ['name' => 'France', 'native' => 'France', 'phone' => '33', 'currency' => 'EUR', ...]

// Specific fields
CountryHelper::getCountryName('JP');           // 'Japan'
CountryHelper::getCountryName('JP', native: true); // 'ζ—₯本'
CountryHelper::getCountryFlag('BR');           // 'πŸ‡§πŸ‡·'
CountryHelper::getCountryPhoneCode('DE');      // '49'
CountryHelper::getCountryCurrency('GB');       // 'GBP'

// Reverse lookups
CountryHelper::findByAlpha3('CAN');            // Canada data
CountryHelper::findByPhoneCode('1');           // ['US' => ..., 'CA' => ...]

// For dropdowns
CountryHelper::getCountriesForSelect();
// ['US' => 'πŸ‡ΊπŸ‡Έ United States (+1)', 'FR' => 'πŸ‡«πŸ‡· France (+33)', ...]

CountryHelper::getCountriesForSelect(withFlag: false, withPhone: false);
// ['US' => 'United States', 'FR' => 'France', ...]

use Teknyo\LocaleHelper\Facades\PhoneHelper;

// Get codes
PhoneHelper::getPhoneCodes();           // ['US' => '1', 'GB' => '44', ...]
PhoneHelper::getPhoneCodesGrouped();    // ['1' => ['US', 'CA'], '44' => ['GB'], ...]
PhoneHelper::getPhoneCode('FR');        // '33'

// Dropdown
PhoneHelper::getPhoneCodesForSelect();
// ['US' => 'πŸ‡ΊπŸ‡Έ United States (+1)', ...]

// Formatting
PhoneHelper::formatE164('(201) 555-0123', 'US');
// '+12015550123'

PhoneHelper::formatInternational('2015550123', 'US');
// '+1 (201) 555-0123'

PhoneHelper::formatNational('+12015550123', 'US');
// '(201) 555-0123'

PhoneHelper::formatNational('0612345678', 'FR');
// '06 12 34 56 78'

PhoneHelper::formatNational('0791234567', 'GB');
// '07912 345678'

// Validation
PhoneHelper::validate('2015550123', 'US');   // true  (10 digits)
PhoneHelper::validate('12345', 'US');        // false (too short)
PhoneHelper::validate('0612345678', 'FR');   // true  (9 digits)

PhoneHelper::isE164('+12015550123');         // true
PhoneHelper::isE164('2015550123');           // false

// Guess country from full number
PhoneHelper::guessCountry('+33612345678');   // 'FR'
PhoneHelper::guessCountry('+442071234567');  // 'GB'
PhoneHelper::guessCountry('+14155552671');   // 'US' (first match)

// config/locale-helper.php
'currencies' => [
    '

LocaleHelper::getCurrencies();
// → only USD, EUR, GBP

LocaleHelper::getCurrency('JPY');
// → null  (filtered out)

LocaleHelper::getCurrenciesForSelect();
// → 3 options only

// But formatting still works — uses raw data internally
LocaleHelper::formatCurrency(1000, 'JPY', 'ja_JP');
// → '¥1,000'

'languages' => [
    '', 'sa', 'eo'],
],

LocaleHelper::getLanguageNames();
// → all languages EXCEPT Latin, Sanskrit, Esperanto

LocaleHelper::getLanguage('la');
// → null

'timezones' => [
    '      'Antarctica/McMurdo',
        'Antarctica/South_Pole',
    ],
],

LocaleHelper::getTimezonesGroupedByRegion();
// → all regions, minus the two excluded zones

'countries' => [
    '','HR','CY','CZ','DK','EE','FI','FR','DE','GR',
        'HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK',
        'SI','ES','SE',
    ],
],
'phones' => [
    '','HR','CY','CZ','DK','EE','FI','FR','DE','GR',
        'HU','IE','IT','LV','LT','LU','MT','NL','PL','PT','RO','SK',
        'SI','ES','SE',
    ],
],

'countries' => [
    'exclude' => ['KP', 'IR', 'SY'],
],

config([
    'locale-helper.currencies.cks up new config
app()->forgetInstance('locale-helper');

LocaleHelper::getCurrencies(); // now only USD + AED

public function withCurrencies(array $codes): static
{
    $clone = clone $this;
    $clone->config['currencies']['cies(['USD', 'EUR']);
$clone->getCurrencies(); // only USD + EUR

{{-- Language selector --}}
<select name="language">
    @foreach(\Teknyo\LocaleHelper\Facades\LocaleHelper::getLanguageNames('native') as $code => $name)
        <option value="{{ $code }}" @selected(app()->getLocale() === $code)>
            {{ $name }}
        </option>
    @endforeach
</select>

{{-- Timezone selector --}}
<select name="timezone">
    @foreach(\Teknyo\LocaleHelper\Facades\LocaleHelper::getTimezonesForSelect() as $id => $label)
        <option value="{{ $id }}">{{ $label }}</option>
    @endforeach
</select>

{{-- Currency display --}}
<span>{{ \Teknyo\LocaleHelper\Facades\LocaleHelper::formatCurrency($order->total, 'USD') }}</span>

<div class="phone-input">
    <select name="phone_country" id="phone_country">
        @foreach(\Teknyo\LocaleHelper\Facades\PhoneHelper::getPhoneCodesForSelect() as $code => $label)
            <option value="{{ $code }}" data-phone-code="{{ \Teknyo\LocaleHelper\Facades\CountryHelper::getCountryPhoneCode($code) }}">
                {{ $label }}
            </option>
        @endforeach
    </select>

    <input type="tel" name="phone_number" id="phone_number" placeholder="Phone number">
</div>

<form action="/submit" method="POST">
    <!-- HTML Structure from above -->
    
    @csrf
    
    <!-- Injects the script with default settings -->
    @localhelperscripts
    
    <button type="submit">Submit</button>
</form>

@localhelperscripts('select_id', 'input_id', 'hidden_field_name')

<select id="billing_phone_country">...</select>
<input type="tel" id="billing_phone_number">

@localhelperscripts('billing_phone_country', 'billing_phone_number', 'billing_phone')

<select id="shipping_phone_country">...</select>
<input type="tel" id="shipping_phone_number">

@localhelperscripts('shipping_phone_country', 'shipping_phone_number', 'shipping_phone')

@push('scripts')
<script>
(function() {
    // 1. Define your element IDs and hidden field name
    const SELECT_ID   = 'phone_country';
    const INPUT_ID    = 'phone_number';
    const HIDDEN_NAME = 'phone';

    const selectEl = document.getElementById(SELECT_ID);
    const inputEl  = document.getElementById(INPUT_ID);
    const form     = selectEl ? selectEl.closest('form') : null;

    if (!selectEl || !inputEl || !form) return;

    // 2. Function to calculate and update the E.164 number
    function updateHiddenField() {
        const selectedOption = selectEl.options[selectEl.selectedIndex];
        const code = selectedOption ? (selectedOption.dataset.phoneCode || '') : '';
        const digits = inputEl.value.replace(/\D/g, '');

        // Find existing hidden field or create a new one
        let hidden = form.querySelector(`input[name="${HIDDEN_NAME}"]`);
        if (!hidden) {
            hidden = document.createElement('input');
            hidden.type = 'hidden';
            hidden.name = HIDDEN_NAME;
            form.appendChild(hidden);
        }
        
        // Set the value (E.164 format)
        hidden.value = code ? '+' + code + digits : digits;
    }

    // 3. Attach event listeners
    form.addEventListener('submit', updateHiddenField); // Safety net on submit
    inputEl.addEventListener('input', updateHiddenField); // Real-time update
    selectEl.addEventListener('change', updateHiddenField); // Update on country change
    
    // 4. Initial run (useful for validation error page reloads)
    updateHiddenField();
})();
</script>
@endpush

const SELECT_ID   = 'billing_phone_country';
const INPUT_ID    = 'billing_phone_number';
const HIDDEN_NAME = 'billing_phone';

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Teknyo\LocaleHelper\Facades\PhoneHelper;

class UserController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'phone_country' => 'ional: Validate the phone number length/format using the package
        if (! PhoneHelper::validate($e164Number, $countryCode)) {
            return back()->withErrors(['phone' => 'The phone number format is invalid for the selected country.']);
        }

        // Optional: Verify it's strictly E.164
        if (! PhoneHelper::isE164($e164Number)) {
             return back()->withErrors(['phone' => 'Invalid phone format.']);
        }

        // Save the user
        // User::create(['phone' => $e164Number, ...]);

        return redirect()->back()->with('success', 'Phone number saved!');
    }
}
bash
php artisan vendor:publish --tag=locale-helper-config