سؤال

أنا أستخدم توطين Laravel لتوفير لغتين مختلفتين.لقد قمت بإعداد جميع عناصر المسار، ويقدم mydomain.com/en/bla اللغة الإنجليزية ويخزن متغير الجلسة "en"، ويقدم mydomain.com/he/bla اللغة العبرية ويخزن متغير الجلسة "he".ومع ذلك، لا يمكنني اكتشاف طريقة مناسبة لتوفير رابط تبديل اللغة.كيف يعمل هذا؟

هل كانت مفيدة؟

المحلول

لقد قمت بحل مشكلتي عن طريق إضافة هذا إلى المرشح قبل التوجيه في Routes.php:

giveacodicetagpre.

نصائح أخرى

هذا هو منشور نشرته أصلا على منتديات Larvel، ولكن ربما سيساعد شخصا آخر، لذلك أقوم بنشره هنا أيضا.

كان لدي بعض المتاعب مع بناء مجمع لغة سهلة لتطبيقي، والمعلومات الموجودة في المنتديات التي قديم قليلا (بعض المشاركات)، لذلك قمت بوجود هذه القطعة البسيطة من التعليمات البرمجية التي تجعلها خالية لتغيير اللغة على التطبيق على الطاير.

لدي سلاسل اللغة في وجهات نظري على النحو التالي:

giveacodicetagpre.

وأحصل على اللغات بعنوان URL، وأعتقد أن هذه هي أفضل طريقة، أيضا من الجيد لسيو SEO والروابط التي يشاركها الناس. مثال:

giveacodicetagpre.

حسنا، لذلك كانت المشكلة كانت أردت وسيلة سهلة لتغيير اللغة على الطاير، دون الحاجة إلى الفوضى مع جلسات وملفات تعريف الارتباط. هيريس كيف صنعت:

قم بإجراء مكتبة في مجلد المكتبات الخاص بك يسمى chooselang.php

أدخل هذا الرمز في الداخل:

giveacodicetagpre

بعد ذلك، أنت مستعد للحصول على عنوان URL لوحات التحكم عناوين URL الخاصة بك: S الذي تم إنشاؤه. ما عليك سوى إضافتها كما تريد أي روابط شفرة أخرى.

مثال كيف تولد روابط للفنلندية والسويدية والإنجليزية (مع شفرة)

giveacodicetagpre.

ما سبق سيؤدي إلى إنشاء عنوان URL: S دائما على الصفحة الحالية، وتغيير Lang Slug إلى الشخص الذي تريده. وبهذه الطريقة تتغير اللغة إلى الشخص الذي تريده، ويبقى المستخدم بشكل طبيعي في نفس الصفحة. لا تتم إضافة Slug اللغة الافتراضية إلى عنوان URL.

عناوين URL التي تم إنشاؤها تبدو مثل:

giveacodicetagpre.

PS. الروابط مفيدة خصيصا إذا قمت بإضافةها إلى ملف القالب الرئيسي الخاص بك.

يمكن أن يكون لديك طريق لتسليم تغيير اللغة، على سبيل المثال:

Route::get('translate/(:any)', 'translator@set');

ثم في set العمل في translator يمكن لوحدة التحكم تغيير الجلسة، اعتمادًا على رمز اللغة الذي تم تمريره عبر عنوان URL.

يمكنك أيضًا تغيير إعداد التكوين باستخدام

Config::set('application.language', $url_variable');

مثال على وحدة التحكم - ترجمة.php

public function action_set($url_variable)
{
     /* Your code Here */
}

فقط في حالة المستخدمين في المستقبل إذا كنت ترغب في استخدام الحزمة للترجمة هناك حزمة رائعة على https://github.com/mcamara/laravel-localization .وهو سهل التركيب ولديه العديد من المساعدين.

لا يزال هذا السؤال يأتي في بحث Google، لذلك إليك الإجابة إذا كنت تستخدم Larvel 4 أو 5، و McAmara / Laravellocalization.

giveacodicetagpre.

لاحظ أن هذا المثال يوضح إشارات (في العمومية / IMG / Flags / {{locale}}. GIF)، واستخدامه ستحتاج إلى القليل من .css، ولكن يمكنك تعديله لعرض النص إذا كنتتريد ...

لمعلوماتك.تحتوي وثائق McAmara / Laravellocalization على أمثلة وكثير من المساعدين، لذا ننظر إلى الوثائق على جيثب.( https://github.com/mcamara/laravel-localization )

حاول استخدام الجلسة.شيء مثل هذا:

وحدة تحكم:

giveacodicetagpre.

in route.php:

giveacodicetagpre.

I've been doing it like this:

$languages = Config::get('lang.languages'); //returns array('hrv', 'eng')

$locale = Request::segment(1); //fetches first URI segment

//for default language ('hrv') set $locale prefix to "", otherwise set it to lang prefix
if (in_array($locale, $languages) && $locale != 'hrv') {
    App::setLocale($locale);
} else {
    App::setLocale('hrv');
    $locale = null;
}

// "/" routes will be default language routes, and "/$prefix" routes will be routes for all other languages
Route::group(array('prefix' => $locale), function() {

    //my routes here

});

Source: http://forumsarchive.laravel.io/viewtopic.php?pid=35185#p35185

What I'm doing consists of two steps: I'm creating a languages table which consists of these fields:

id | name | slug

which hold the data im gonna need for the languages for example

1 | greek | gr

2 | english | en

3 | deutch | de

The Language model I use in the code below refers to that table.

So, in my routes.php I have something like:

//get the first segment of the url
$slug = Request::segment(1);   
$requested_slug = "";

//I retrieve the recordset from the languages table that has as a slug the first url segment of request
$lang = Language::where('slug', '=', $slug)->first();

//if it's null, the language I will retrieve a new recordset with my default language
$lang ? $requested_slug = $slug :  $lang = Language::where('slug', '=', **mydefaultlanguage**')->first();

//I'm preparing the $routePrefix variable, which will help me with my forms
$requested_slug == ""? $routePrefix = "" : $routePrefix = $requested_slug.".";

//and I'm putting the data in the in the session
Session::put('lang_id', $lang->id);
Session::put('slug', $requested_slug);
Session::put('routePrefix', $routePrefix );
Session::put('lang', $lang->name);

And then I can write me routes using the requested slug as a prefix...

Route::group(array('prefix' =>  $requested_slug), function()
{
    Route::get('/', function () {
        return "the language here is gonna be: ".Session::get('lang');
    });

    Route::resource('posts', 'PostsController');
    Route::resource('albums', 'AlbumsController');
});

This works but this code will ask the database for the languages everytime the route changes in my app. I don't know how I could, and if I should, figure out a mechanism that detects if the route changes to another language.

Hope that helped.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top