Hafsa Aly نشر 4 مارس 2023 أرسل تقرير نشر 4 مارس 2023 السلام عليكم استعمل في التطبيق الترجمة ياستخدام laravel spatie translation اذا كان لدي عمودين فقط في ال db اخزن قيمتهم باستخدام json اسم المنتج ووصف المنتج (لغة عربية لغة اجنبية) لاقي الاعمدة قيم لاتحتاج الى ترجمة اولا كيف اقوم بتخزينهم في الdb ومن ثم كيف اعرضهم في تطبيقي 2 اقتباس
0 Adnane Kadri نشر 4 مارس 2023 أرسل تقرير نشر 4 مارس 2023 ستحتاجين تعريف هاذين العمودين في خاصية translatable التي تستعملها السمة HasTranslations كالتالي: public $translatable = ['name' ,'description']; انتبهي الى أن هاته الأعمدة يجب ان تكون من نوع longText لتسع تخزين كائنات الجيسون داخلها. اقتباس
0 أحمد رضا5 نشر 4 مارس 2023 أرسل تقرير نشر 4 مارس 2023 لتخزين الأعمدة التي لا تحتاج إلى ترجمة ، يمكنك استخدام عمودين عاديين في جدول قاعدة البيانات الخاص بك. أما بالنسبة للأعمدة التي تحتاج إلى ترجمة (اسم المنتج ووصف المنتج)، فيمكنك استخدام تنسيق JSON لتخزين القيم باللغة العربية والإنجليزية. لتخزين القيم في الجدول، يمكنك استخدام ميزة تحويل البيانات إلى JSON المتاحة في Laravel باستخدام الدالة json_encode() ، على سبيل المثال: $product = new Product; $product->name = '{ "en": "English product name", "ar": "اسم المنتج باللغة العربية" }'; $product->description = '{ "en": "English product description", "ar": "وصف المنتج باللغة العربية" }'; $product->save(); وعندما تقوم بإرجاع القيم من الجدول، يمكنك استخدام دالة json_decode() لتحويل القيم إلى صيغة مفهومة، على سبيل المثال: $product = Product::find(1); $name = json_decode($product->name, true); $description = json_decode($product->description, true); echo $name['en']; // English product name echo $name['ar']; // اسم المنتج باللغة العربية echo $description['en']; // English product description echo $description['ar']; // وصف المنتج باللغة العربية يمكنك استخدام حزمة Laravel Spatie Translation لإدارة الترجمة في تطبيقك، وهي تسمح لك بتخزين النصوص في جدول منفصل والوصول إليها بسهولة باستخدام واجهة API مميزة. 1 اقتباس
0 Mustafa Suleiman نشر 4 مارس 2023 أرسل تقرير نشر 4 مارس 2023 يمكن تخزين القيم التي لا تحتاج إلى ترجمة بشكل عادي في العمود نفسه دون استخدام JSON. أما بالنسبة للأعمدة التي تحتاج إلى ترجمة، فيمكن استخدام JSON لتخزين النص المترجم لكل لغة في مفتاح يمثل اسم اللغة. على سبيل المثال، يمكن إنشاء عمود "product_name" و "product_description" في الجدول الخاص بالمنتجات في قاعدة البيانات. يمكن تخزين النص المترجم لكل لغة باستخدام JSON على النحو التالي: { "ar": "اسم المنتج", "en": "Product Name" } يمكن تحديد القيمة المخزنة باستخدام العنصر الفرعي "ar" للغة العربية والعنصر الفرعي "en" للغة الإنجليزية. لعرض القيم في تطبيقك، يمكنك استخدام حزمة "spatie/laravel-translatable" في Laravel لترجمة النصوص بسهولة. يمكنك استخدام الوظيفة "translatable()" لتحديد الأعمدة التي تحتوي على النص المترجم واستخدام الدالة "translate()" للوصول إلى النص المترجم للغة المحددة. على سبيل المثال: $product = Product::find(1); // الحصول على اسم المنتج بلغة معينة $productName = $product->translate('ar')->product_name; يمكنك أيضًا استخدام الوظيفة "locale()" للتحقق من اللغة الحالية المستخدمة في التطبيق وعرض النص المترجم باللغة المناسبة تلقائيًا. $product = Product::find(1); // الحصول على اسم المنتج باللغة الحالية في التطبيق $productName = $product->translate(app()->getLocale())->product_name; يمكن استخدام هذا النهج لعرض الوصف المترجم للمنتجات أيضًا. وسأشرح لك المزيد وتخزين البيانات المتعلقة باللغات في قاعدة البيانات يمكن أن يكون تحديًا في تطبيقات الويب متعددة اللغات. إذا كان لديك عمودين فقط في جدول قاعدة البيانات واحد يتعلق بالاسم والآخر بالوصف، وتريد ترجمة قيمهما للغات المختلفة، فيمكن استخدام حزمة "spatie/laravel-translatable" في Laravel. قبل البدء في الاستخدام، يجب تثبيت الحزمة باستخدام مدير الحزم composer، باستخدام الأمر التالي: composer require spatie/laravel-translatable يمكن تحويل العمود الذي يحتوي على الاسم والعمود الذي يحتوي على الوصف إلى حقول قابلة للترجمة باستخدام خاصية "translatable" من الحزمة، على النحو التالي: use Spatie\Translatable\HasTranslations; class Product extends Model { use HasTranslations; public $translatable = ['product_name', 'product_description']; // ... } تم تحويل العمودين "product_name" و "product_description" إلى حقول قابلة للترجمة باستخدام الخاصية "translatable". بعد ذلك، يمكن إدخال البيانات المتعلقة بالترجمة في قاعدة البيانات باستخدام تنسيق JSON المعتمد من Laravel، كما أوضحته في إجابتي السابقة. يمكن الوصول إلى قيمة الحقل المترجم باستخدام الدالة "translate()"، على النحو التالي: $product = Product::find(1); // الحصول على اسم المنتج بلغة معينة $productName = $product->translate('ar')->product_name; // الحصول على وصف المنتج بلغة معينة $productDescription = $product->translate('ar')->product_description; إذا كنت تريد عرض النص المترجم للغة المحددة في تطبيقك، يمكن استخدام الدالة "locale()" للتحقق من اللغة الحالية للمستخدم وعرض النص المترجم باللغة المناسبة، على النحو التالي: $product = Product::find(1); // 1 اقتباس
0 Hafsa Aly نشر 5 مارس 2023 الكاتب أرسل تقرير نشر 5 مارس 2023 بتاريخ 19 ساعة قال Mustafa Suleiman: يمكن تخزين القيم التي لا تحتاج إلى ترجمة بشكل عادي في العمود نفسه دون استخدام JSON. أما بالنسبة للأعمدة التي تحتاج إلى ترجمة، فيمكن استخدام JSON لتخزين النص المترجم لكل لغة في مفتاح يمثل اسم اللغة. على سبيل المثال، يمكن إنشاء عمود "product_name" و "product_description" في الجدول الخاص بالمنتجات في قاعدة البيانات. يمكن تخزين النص المترجم لكل لغة باستخدام JSON على النحو التالي: { "ar": "اسم المنتج", "en": "Product Name" } يمكن تحديد القيمة المخزنة باستخدام العنصر الفرعي "ar" للغة العربية والعنصر الفرعي "en" للغة الإنجليزية. لعرض القيم في تطبيقك، يمكنك استخدام حزمة "spatie/laravel-translatable" في Laravel لترجمة النصوص بسهولة. يمكنك استخدام الوظيفة "translatable()" لتحديد الأعمدة التي تحتوي على النص المترجم واستخدام الدالة "translate()" للوصول إلى النص المترجم للغة المحددة. على سبيل المثال: $product = Product::find(1); // الحصول على اسم المنتج بلغة معينة $productName = $product->translate('ar')->product_name; يمكنك أيضًا استخدام الوظيفة "locale()" للتحقق من اللغة الحالية المستخدمة في التطبيق وعرض النص المترجم باللغة المناسبة تلقائيًا. $product = Product::find(1); // الحصول على اسم المنتج باللغة الحالية في التطبيق $productName = $product->translate(app()->getLocale())->product_name; يمكن استخدام هذا النهج لعرض الوصف المترجم للمنتجات أيضًا. وسأشرح لك المزيد وتخزين البيانات المتعلقة باللغات في قاعدة البيانات يمكن أن يكون تحديًا في تطبيقات الويب متعددة اللغات. إذا كان لديك عمودين فقط في جدول قاعدة البيانات واحد يتعلق بالاسم والآخر بالوصف، وتريد ترجمة قيمهما للغات المختلفة، فيمكن استخدام حزمة "spatie/laravel-translatable" في Laravel. قبل البدء في الاستخدام، يجب تثبيت الحزمة باستخدام مدير الحزم composer، باستخدام الأمر التالي: composer require spatie/laravel-translatable يمكن تحويل العمود الذي يحتوي على الاسم والعمود الذي يحتوي على الوصف إلى حقول قابلة للترجمة باستخدام خاصية "translatable" من الحزمة، على النحو التالي: use Spatie\Translatable\HasTranslations; class Product extends Model { use HasTranslations; public $translatable = ['product_name', 'product_description']; // ... } تم تحويل العمودين "product_name" و "product_description" إلى حقول قابلة للترجمة باستخدام الخاصية "translatable". بعد ذلك، يمكن إدخال البيانات المتعلقة بالترجمة في قاعدة البيانات باستخدام تنسيق JSON المعتمد من Laravel، كما أوضحته في إجابتي السابقة. يمكن الوصول إلى قيمة الحقل المترجم باستخدام الدالة "translate()"، على النحو التالي: $product = Product::find(1); // الحصول على اسم المنتج بلغة معينة $productName = $product->translate('ar')->product_name; // الحصول على وصف المنتج بلغة معينة $productDescription = $product->translate('ar')->product_description; إذا كنت تريد عرض النص المترجم للغة المحددة في تطبيقك، يمكن استخدام الدالة "locale()" للتحقق من اللغة الحالية للمستخدم وعرض النص المترجم باللغة المناسبة، على النحو التالي: $product = Product::find(1); // اكثر من رائع شكرا لك ولكن يبقى لي كيفية عمل store لل request القادم اليا من create product للمنتج المترجم والغير مترجم اقتباس
0 Hafsa Aly نشر 6 مارس 2023 الكاتب أرسل تقرير نشر 6 مارس 2023 بتاريخ On 5/3/2023 at 10:14 قال Hafsa Aly: اكثر من رائع شكرا لك ولكن يبقى لي كيفية عمل store لل request القادم اليا من create product للمنتج المترجم والغير مترجم ارجو الرد اقتباس
0 أحمد رضا5 نشر 6 مارس 2023 أرسل تقرير نشر 6 مارس 2023 بتاريخ On 5/3/2023 at 10:14 قال Hafsa Aly: اكثر من رائع شكرا لك ولكن يبقى لي كيفية عمل store لل request القادم اليا من create product للمنتج المترجم والغير مترجم يمكنك تنفيز المطلوب باتباع الخطوات التالية: قم بإنشاء ملف الترجمة لكل لغة تريد دعمها في مجلد اللغات الخاص بالتطبيق، على سبيل المثال: resources/lang/en/products.php resources/lang/ar/products.php يجب أن يحتوي كل ملف لغة على مفاتيح الترجمة وقيمها المقابلة. قم بإنشاء ملف اللغة الافتراضية في config/app.php، مثل: 'locale' => 'en', قم بتثبيت حزمة laravel-translatable لإضافة دعم الترجمة لنموذج المنتج Product. انشئ مودل Product واستخدم السمة Translatable المقدمة من laravel-translatable لإضافة الحقول المترجمة: use Spatie\Translatable\HasTranslations; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasTranslations; public $translatable = ['name', 'description']; protected $fillable = ['name', 'description']; } في ملف الـ ProductController، قم بتحقق من صحة البيانات التي تم إرسالها من قبل المستخدم باستخدام الطريقة validate المدمجة في Laravel: public function store(Request $request) { $validatedData = $request->validate([ 'name' => 'required', 'description' => 'required', ]); $product = Product::create($validatedData); return redirect()->route('products.index'); } يمكنك إضافة حقول اللغة في النموذج الخاص بـ create باستخدام دالة translatable المتاحة في laravel-translatable: <form method="POST" action="{{ route('products.store') }}"> @csrf <label for="name">Name</label> <input type="text" name="name" id="name" value="{{ old('name') }}" required> @foreach(config('translatable.locales') as $locale) <label for="name_{{ $locale }}">Name ({{ strtoupper($locale) }})</label> <input type="text" name="name_{{ $locale }}" id="name_{{ $locale }}" value="{{ old('name_'.$locale) }}"> @endforeach <label for="description">Description</label> <textarea name="description" id="description" required>{{ old('description') }}</textarea> @foreach(config('translatable.locales') as $locale) <label for="description_{{ $ locale }}">Description ({{ strtoupper($locale) }})</label> <textarea name="description_{{ $locale }}" id="description_{{ $locale }}">{{ old('description_'.$locale) }}</textarea> @endforeach <button type="submit">Create</button> </form> ``` هذا الشكل سيظهر حقول اللغة التي تم تعريفها في نموذج Product، وسيتم حفظ القيم المدخلة لهذه الحقول في جدول اللغات المترجمة product_translations. لاستخراج القيم المترجمة لـ Product في الصفحات الأخرى، يمكنك استخدام دالة getTranslation المتاحة في laravel-translatable، مثل: {{ $product->getTranslation('name', 'en') }} هذا الشكل سيسترجع اسم المنتج المترجم باللغة الإنجليزية. يمكنك استخدام الدالة trans المدمجة في Laravel لترجمة النصوص في الصفحات، مثل: {{ __('products.name') }} هذا الشكل سيسترجع النص المترجم لـ "Name" الموجود في ملف الترجمة. في حالة إرسال النموذج، يجب تخزين القيم المدخلة في جدول اللغات المترجمة product_translations. يمكنك القيام بذلك باستخدام دالة setTranslation المتاحة في laravel-translatable، مثل: $product->setTranslation('name', 'en', $request->input('name_en')); $product->setTranslation('name', 'ar', $request->input('name_ar')); $product->setTranslation('description', 'en', $request->input('description_en')); $product->setTranslation('description', 'ar', $request->input('description_ar')); $product->save(); هذا الشكل يضيف القيم المدخلة لحقول اللغة المختلفة في جدول product_translations الخاص بـ Product. يمكنك عرض جميع المنتجات الموجودة في النظام مع قيمها المترجمة باستخدام الدالة translated المتاحة في laravel-translatable، مثل: @foreach($products as $product) <h2>{{ $product->translated('name') }}</h2> <p>{{ $product->translated('description') }}</p> @endforeach هذا الشكل سيعرض جميع المنتجات الموجودة في النظام مع اسم المنتج ووصفه المترجم. 1 اقتباس
السؤال
Hafsa Aly
السلام عليكم
استعمل في التطبيق الترجمة ياستخدام laravel spatie translation
اذا كان لدي عمودين فقط في ال db اخزن قيمتهم باستخدام json اسم المنتج ووصف المنتج (لغة عربية لغة اجنبية)
لاقي الاعمدة قيم لاتحتاج الى ترجمة اولا كيف اقوم بتخزينهم في الdb ومن ثم كيف اعرضهم في تطبيقي
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.