Django

⌘K
  1. Home
  2. Django
  3. Django তে কিভাবে কাজ করতে...
  4. ইন্টারন্যাশনালাইজেশন ও লোকালাইজেশন:

ইন্টারন্যাশনালাইজেশন ও লোকালাইজেশন:

Rest Api Backend

Django Backend

ধাপ ১: Django প্রজেক্ট সেটআপ

নতুন Django প্রজেক্ট তৈরি করুন:

django-admin startproject multilingual_api
cd multilingual_api

নতুন অ্যাপ তৈরি করুন:

python manage.py startapp products

multilingual_api/

├── multilingual_api/
│   ├── __init__.py
│   ├── asgi.py
│   ├── settings.py
│   ├── urls.py
│   ├── wsgi.py

├── products/                        # Your Django app for products
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── migrations/
│   ├── models.py
│   ├── views.py
│   ├── urls.py
│   └── templates/
│       └── products/
│           ├── product_list.html
│           └── change_language.html

├── locale/                          # Locale directory for translations
│   ├── bn/
│   │   └── LC_MESSAGES/
│   │       └── django.po            # Bengali translations
│   ├── hi/
│   │   └── LC_MESSAGES/
│   │       └── django.po            # Hindi translations
│   └── zh/
│       └── LC_MESSAGES/
│           └── django.po            # Chinese translations

└── manage.py

INSTALLED_APPS এ প্রয়োজনীয় অ্যাপ এবং মিডলওয়্যার যুক্ত করুন:

settings.py ফাইলে নিচের কোড যুক্ত করুন:

# settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'products',
]

ভাষার সেটআপ করুন: settings.py ফাইলে আপনার অ্যাপের ভাষাগুলি উল্লেখ করুন:

# settings.py
from django.utils.translation import gettext_lazy as _

LANGUAGES = [
    ('en', 'English'),
    ('bn', 'Bengali'),
    ('hi', 'Hindi'),
    ('zh', 'Chinese'),
]

LOCALE_PATHS = [
    BASE_DIR / 'locale',
]

MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
]

ধাপ ২: মডেল তৈরি

  1. একটি Product মডেল তৈরি করুন:
# products/models.py
from django.db import models
from django.utils.translation import gettext_lazy as _

class Product(models.Model):
    name = models.CharField(_("Product Name"), max_length=255)
    description = models.TextField(_("Description"))
    price = models.DecimalField(_("Price"), max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name

মডেল মাইগ্রেট করুন:

python manage.py makemigrations
python manage.py migrate

ধাপ ৩: সিরিয়ালাইজার তৈরি

  1. মডেলের জন্য সিরিয়ালাইজার তৈরি করুন:
# products/serializers.py
from rest_framework import serializers
from .models import Product
from django.utils.translation import gettext_lazy as _

class ProductSerializer(serializers.ModelSerializer):
    name = serializers.CharField(source='name', label=_("Product Name"))
    description = serializers.CharField(source='description', label=_("Description"))

    class Meta:
        model = Product
        fields = ['id', 'name', 'description', 'price']

ধাপ ৪: ভিউ তৈরি

  1. API ভিউ তৈরি করুন:
# products/views.py
from django.utils import translation
from rest_framework import generics, views, status
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from .models import Product
from .serializers import ProductSerializer

class ProductListCreateView(generics.ListCreateAPIView):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

class ChangeLanguageView(views.APIView):
    permission_classes = [AllowAny]

    def post(self, request):
        language = request.data.get('language')

        if language in dict(settings.LANGUAGES):
            translation.activate(language)
            request.session[translation.LANGUAGE_SESSION_KEY] = language
            return Response({"message": "Language changed successfully."}, status=status.HTTP_200_OK)
        else:
            return Response({"error": "Invalid language code."}, status=status.HTTP_400_BAD_REQUEST)

class GetLanguagesView(views.APIView):
    permission_classes = [AllowAny]

    def get(self, request):
        languages = dict(settings.LANGUAGES)
        return Response(languages, status=status.HTTP_200_OK)

ধাপ ৫: URL সেটআপ

  1. API URL সেটআপ করুন:
# products/urls.py
from django.urls import path
from .views import ProductListCreateView, ChangeLanguageView, GetLanguagesView

urlpatterns = [
    path('products/', ProductListCreateView.as_view(), name='product-list-create'),
    path('change-language/', ChangeLanguageView.as_view(), name='change-language'),
    path('get-languages/', GetLanguagesView.as_view(), name='get-languages'),
]

মুল urls.py ফাইলে অ্যাপের URL অন্তর্ভুক্ত করুন:

# multilingual_api/urls.py
from django.urls import path, include

urlpatterns = [
    path('api/', include('products.urls')),
]

ধাপ ৬: অনুবাদযোগ্য তথ্য তৈরি করা

  1. অনুবাদযোগ্য টেক্সটের জন্য মেসেজ ফাইল তৈরি করুন: টার্মিনালে নিচের কমান্ডটি চালান:
django-admin makemessages -l bn   # বাংলা ভাষার জন্য
django-admin makemessages -l hi   # হিন্দি ভাষার জন্য
django-admin makemessages -l zh   # চাইনিজ ভাষার জন্য

প্রতিটি .po ফাইলে অনুবাদ যুক্ত করুন: উদাহরণস্বরূপ, locale/bn/LC_MESSAGES/django.po ফাইলে:

msgid "Product Name"
msgstr "পণ্যের নাম"

msgid "Description"
msgstr "বর্ণনা"

msgid "Price"
msgstr "মূল্য"

অনুবাদ ফাইলগুলি কম্পাইল করুন:

django-admin compilemessages

ধাপ ৭: API টেস্ট করা

  1. সার্ভার চালান:
python manage.py runserver

React Frontend

ধাপ ১: React অ্যাপ তৈরি

নতুন React অ্যাপ তৈরি করুন:

npx create-react-app multilingual-app
cd multilingual-app

Axios ইনস্টল করুন:

npm install axios

ধাপ ২: React কোড তৈরি

// src/App.js
import React, { useEffect, useState } from 'react';
import axios from 'axios';

const App = () => {
    const [products, setProducts] = useState([]);
    const [languages, setLanguages] = useState([]);
    const [selectedLanguage, setSelectedLanguage] = useState('en');

    useEffect(() => {
        fetchProducts();
        fetchLanguages();
    }, [selectedLanguage]);

    const fetchProducts = async () => {
        const response = await axios.get('http://127.0.0.1:8000/api/products/', {
            headers: { 'Accept-Language': selectedLanguage }
        });
        setProducts(response.data);
    };

    const fetchLanguages = async () => {
        const response = await axios.get('http://127.0.0.1:8000/api/get-languages/');
        setLanguages(response.data);
    };

    const changeLanguage = async (language) => {
        await axios.post('http://127.0.0.1:8000/api/change-language/', { language });
        setSelectedLanguage(language);
    };

    return (
        <div>
            <h1>Products</h1>
            <select onChange={(e) => changeLanguage(e.target.value)}>
                {Object.entries(languages).map(([code, name]) => (
                    <option key={code} value={code}>
                        {name}
                    </option>
                ))}
            </select>
            <ul>
                {products.map(product => (
                    <li key={product.id}>
                        <h2>{product.name}</h2>
                        <p>{product.description}</p>
                        <p>{product.price}</p>
                    </li>
                ))}
            </ul>
        </div>
    );
};

export default App;

ধাপ ৩: React অ্যাপ রান করা

  1. React অ্যাপ চালান:
npm start

পরীক্ষা ও ব্যবহার:

  • আপনার Django সার্ভার চালু রাখুন।
  • React অ্যাপ চালু করুন।
  • আপনি এখন বিভিন্ন ভাষায় পণ্যগুলোর তালিকা দেখতে পারবেন এবং ভাষা পরিবর্তন করতে পারবেন।

উপসংহার

এখন আপনার Django REST API এবং React অ্যাপ তৈরি সম্পন্ন হয়েছে, যা আন্তর্জাতিকীকরণ সমর্থন করে। এই টিউটোরিয়ালটি ব্যবহার করে আপনি সহজেই Django এবং React এর মাধ্যমে একটি মাল্টি-ল্যাঙ্গুয়েজ অ্যাপ তৈরি করতে পারবেন।

Django প্রজেক্টে ভিউ এবং টেম্পলেট ব্যবহার

ধাপ ১: Django প্রজেক্ট সেটআপ

  1. নতুন Django প্রজেক্ট তৈরি করুন:
django-admin startproject multilingual_site
cd multilingual_site

নতুন অ্যাপ তৈরি করুন:

python manage.py startapp products

INSTALLED_APPS এবং মিডলওয়্যার সেটআপ করুন:

settings.py ফাইলে নিচের কোড যুক্ত করুন:

# settings.py
from django.utils.translation import gettext_lazy as _

INSTALLED_APPS = [
    ...
    'products',
]

LANGUAGES = [
    ('en', 'English'),
    ('bn', 'Bengali'),
    ('hi', 'Hindi'),
    ('zh', 'Chinese'),
]

LOCALE_PATHS = [
    BASE_DIR / 'locale',  # Translation files path
]

MIDDLEWARE = [
    ...
    'django.middleware.locale.LocaleMiddleware',
    ...
]


# Template settings (no changes needed, but include necessary dirs)
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],  # Your global templates directory
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                
            ],
        },
    },
]

ধাপ ২: মডেল তৈরি

  1. Product মডেল তৈরি করুন:
# products/models.py
from django.db import models
from django.utils.translation import gettext_lazy as _

class Product(models.Model):
    name = models.CharField(_("Product Name"), max_length=255)
    description = models.TextField(_("Description"))
    price = models.DecimalField(_("Price"), max_digits=10, decimal_places=2)

    def __str__(self):
        return self.name

মডেল মাইগ্রেট করুন:

python manage.py makemigrations
python manage.py migrate

Create the context_processors.py file in the app directory (e.g., attendance):

RestApiProject/
├── products/
│   ├── __init__.py
│   ├── models.py
│   ├── views.py
│   ├── context_processors.py  # <- Add this file here
│   └── ...
├── anotherapp/
└── ...

Define the context processor in attendance/context_processors.py:

from django.conf import settings

def languages(request):
    return {'LANGUAGES': settings.LANGUAGES}

Update your TEMPLATES configuration in settings.py:

# settings.py
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'products.context_processors.languages',  # <- Update this line
            ],
        },
    },
]


ধাপ ৩: ভিউ তৈরি

  1. ভাষা পরিবর্তন এবং পণ্যের তালিকা দেখানোর জন্য ভিউ তৈরি করুন:
# products/views.py
from django.shortcuts import render
from django.utils import translation
from .models import Product

def product_list(request):
    products = Product.objects.all()
    return render(request, 'products/product_list.html', {'products': products})

def change_language(request):
    if request.method == 'POST':
        language = request.POST.get('language')
        if language in dict(request.LANGUAGES):
            translation.activate(language)
            request.session[translation.LANGUAGE_SESSION_KEY] = language
    return render(request, 'products/change_language.html')

ধাপ ৪: টেম্পলেট তৈরি

  1. product_list.html টেম্পলেট তৈরি করুন:
<!-- templates/products/product_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% trans "Product List" %}</title>
</head>
<body>
    <h1>{% trans "Product List" %}</h1>
    <ul>
        {% for product in products %}
            <li>
                <h2>{{ product.name }}</h2>
                <p>{{ product.description }}</p>
                <p>{{ product.price }}</p>
            </li>
        {% endfor %}
    </ul>
    <a href="{% url 'change_language' %}">{% trans "Change Language" %}</a>
</body>
</html>

change_language.html টেম্পলেট তৈরি করুন:

<!-- templates/products/change_language.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% trans "Change Language" %}</title>
</head>
<body>
    <h1>{% trans "Change Language" %}</h1>
    <form action="" method="POST">
        {% csrf_token %}
        <select name="language">
            <option value="en">English</option>
            <option value="bn">বাংলা</option>
            <option value="hi">हिंदी</option>
            <option value="zh">中文</option>
        </select>
        <button type="submit">{% trans "Change Language" %}</button>
    </form>
</body>
</html>

ধাপ ৫: URL সেটআপ

  1. URL ফাইল তৈরি করুন:
# products/urls.py
from django.urls import path
from .views import product_list, change_language

urlpatterns = [
    path('products/', product_list, name='product_list'),
    path('change-language/', change_language, name='change_language'),
]

মুল urls.py ফাইলে অ্যাপের URL অন্তর্ভুক্ত করুন:

# multilingual_site/urls.py
from django.urls import path, include

urlpatterns = [
    path('', include('products.urls')),
]

ধাপ ৬: অনুবাদ ফাইল তৈরি করা

  1. অনুবাদযোগ্য টেক্সটের জন্য মেসেজ ফাইল তৈরি করুন: টার্মিনালে নিচের কমান্ডটি চালান:
django-admin makemessages -l bn   # বাংলা ভাষার জন্য
django-admin makemessages -l hi   # হিন্দি ভাষার জন্য
django-admin makemessages -l zh   # চাইনিজ ভাষার জন্য

প্রতিটি .po ফাইলে অনুবাদ যুক্ত করুন: উদাহরণস্বরূপ, locale/bn/LC_MESSAGES/django.po ফাইলে:

msgid "Product List"
msgstr "পণ্যের তালিকা"

msgid "Change Language"
msgstr "ভাষা পরিবর্তন করুন"

অনুবাদ ফাইলগুলি কম্পাইল করুন:

django-admin compilemessages

ধাপ ৭: টেস্টিং এবং রান করা

  1. সার্ভার চালান:
python manage.py runserver
  1. আপনার ব্রাউজারে যান এবং /products/ এ যান। পণ্যের তালিকা বিভিন্ন ভাষায় দেখতে পাওয়ার জন্য Change Language এ ক্লিক করুন এবং ভাষা পরিবর্তন করুন।

উপসংহার

এখন আপনি Django-এ ভিউ এবং টেম্পলেট ব্যবহার করে কিভাবে একটি মাল্টি-ল্যাঙ্গুয়েজ অ্যাপ তৈরি করতে পারবেন তা শিখেছেন। এই প্রজেক্টের মাধ্যমে, আপনি ভাষা পরিবর্তন করার ক্ষমতা যুক্ত করতে পারবেন এবং প্রতিটি মডেল ফিল্ডকে বিভিন্ন ভাষায় রেন্ডার করতে পারবেন।

django-rosetta: Django অ্যাপ্লিকেশনকে সহজে translate করতে সাহায্য করে।(Not Complete)

django-modeltranslation: Django মডেলের ডেটা translate করতে সাহায্য করে। (Not Complete)

How can we help?