Product teams
Deliver localized versions of your product faster by automating tedious localization steps.
Localization teams
Streamline your workflows and simplify collaboration with efficient localization management.
Developers teams
Add Transifex to your CI/CD pipeline to continuously deploy new translations.
Marketing teams
Quickly launch multilingual websites to accelerate international growth and conversions.
Translators
Deliver more accurate translations faster, leveraging advanced linguistic tools.
Software localization
Keep software continuously localized and in sync using automated CI/CD workflows.
Website localization
Automate and scale website localization to attract and convert international visitors.
Mobile App localization
Rapidly translate and launch apps globally, ensuring high-quality user experiences across markets.
Get a Personalized Demo Today
Precise, on-brand translations at scale. Language AI delivers context-rich content faster.
Get a personalized demo today
Request a personalized demo to learn how to integrate Transifex into your CI/CD
Product teams
Deliver localized versions of your product faster by automating tedious localization steps.
Localization teams
Streamline your workflows and simplify collaboration with efficient localization management.
Developers teams
Add Transifex to your CI/CD pipeline to continuously deploy new translations.
Marketing teams
Quickly launch multilingual websites to accelerate international growth and conversions.
Translators
Deliver more accurate translations faster, leveraging advanced linguistic tools.
Software localization
Keep software continuously localized and in sync using automated CI/CD workflows.
Website localization
Automate and scale website localization to attract and convert international visitors.
Mobile App localization
Rapidly translate and launch apps globally, ensuring high-quality user experiences across markets.
Get a Personalized Demo Today
Precise, on-brand translations at scale. Language AI delivers context-rich content faster.
Get a personalized demo today
Request a personalized demo to learn how to integrate Transifex into your CI/CD
Due to its popularity, Django is often used to develop applications serving audiences spanning different localities and regions, which is where Django localization comes in.
In order to guarantee the best user experience for all your users, it is best that you tailor your application to match your users' language and cultural preferences.
In this article, we will briefly highlight forms of localization and how you can install and configure the Django SDK in your Django projects, as well as how you can leverage it to perform localization in your projects.
Essentially, localization is the process of taking a product, service, or content in its original form and adapting it to fit the standards, cultural, linguistic, or laws and regulations of people in a given locale.
Typically, localization involves translating a product or service to a local dialect that people in a specific market understand. However, it is much more than that. Localization goes beyond just text translation and can involve other forms of media, such as images and videos.
Localization is important for a number of reasons. First and foremost, it allows companies to expand their reach and tap into new markets. By making their products and services available in different languages and cultures, they can appeal to a wider audience and potentially increase their sales.
Django has built-in support for translating text and formatting dates, numbers, times, and time zones. This is made possible because Django does the following:
While Django provides a rich set of i18 tools, it has several limitations, such as locale restrictions. However, with Transifex, you can streamline your Django localization and translation efforts by leveraging its advanced features and integrations.
There are different approaches to localizing your Django project using Transifex. Depending on your project needs and size, you can choose to use:
In this article, we will focus on fileless localization using the Django Transifex native SDK.
Transifex Native is a collection of tools that allow for easy localization of your applications by installing framework-specific SDKs.
For instance, you need to install the Django SDK when working with Django projects. Once you have installed an SDK, you can push or pull content for localization directly with Transifex without the need for a file.
While Django provides internationalization hooks that are on by default, Transifex Native also offers its own translation hook commands for Django templates, {% t %}, and Python views, t().
The Transifex Native localization framework utilizes the ICU syntax to specify localization rules. It also allows you to specify metadata such as context, tags, and character limits for individual strings.
The Transifex Django SDK is a comprehensive toolkit designed to seamlessly integrate with the Django framework.
It includes features for mapping source strings for translation, retrieving translated strings, and displaying translations in templates or views. Additionally, the SDK offers Command Line Interface (CLI) commands to help push translations to Transifex and migrate existing template code to the new syntax.
Prerequisites.
To use the Transifex Django SDK, you will need to sign up for a Transifex account or login into an existing one. Once logged in, you’ll need to create a new Transifex native project from within the Transifex application.
To install the Django SDK run the command below on the terminal.
<code class="language-python">pip install transifex-python</code>
To be able to use the Transifex Native SDK with the Transifex platform through the Transifex Content Delivery Service, you require requires certain credentials to do so.
These credentials include a project_secret, which is related to your Transifex project and is used for pushing source content to Transifex, and a project_token, which is also related to your Transifex project and is used for pulling translations from Transifex.
To obtain these credentials, we first need to create a new native project and choose the source and target languages.
Once you have created your project, select your SDK as Django and generate the Transifex native credentials that will allow the Django SDK to communicate with Transifex.
Copy the transifex native token and secret since we will need them in the subsequent steps for configuration.
Navigate to the settings file of your Django projects and add the entries below to the file.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'accounts',
'django_filters',
'transifex.native.django',
]
LANGUAGE_CODE = 'en' # replace with your project's source language
USE_I18N = True
USE_L10N = True# Replace with the proper values for the Transifex project token and secret,
# as found in the Transifex UI under your project
TRANSIFEX_TOKEN = '1/babe7cc10a86f499fdfe70826afe20fc84e2c124' # used for pulling translations from Transifex
TRANSIFEX_SECRET = '1/d93c5646b2f97642adb33fbb9fec9dc93aa9927e' # used for pushing source content to Transifex
TRANSIFEX_SYNC_INTERVAL = 5 # used for defining the daemon running interval in seconds
Once we have configured the Django SDK, you can now start pushing, pulling, and displaying the translations to your Django application.
Now that you've configured your SDK, we can directly push our content to Transifex without needing external files. You can use it inside Django templates and views.
For instance, to use the Transifex SDK in our templates, we need to add the following template tags on the top of your HTML files.
{% load i18n %}
{% load transifex %}
Now make strings and variables in the HTML code translatable by using any of the two template tags below.
{% t %}
{% ut %}
For instance, here is a section of a demo application wrapped using one of the tags above.
<div class="col-md-7">
<h5>{% t "LAST 5 ORDERS" %}</h5>
<hr>
<div class="card card-body">
<hr>
<table class="table table-sm">
<tr>
<th>{% t "Product" %}</th>
<th>{% t "Date Ordered" %}</th>
<th>{% t "Status" %}</th>
<th>{% t "Update" %}</th>
<th>{% t "Remove" %}</th>
{% for order in orders %}
<tr>
<td>{% t "Dishes" %} </td>
<td>{{order.date_created}}</td>
<td>{% t "Delivered" %}</td>
<td><a class = "btn btn-sm btn-info" href="">{% t "Update" %} </a> </td>
<td><a class = "btn btn-sm btn-danger" href="">{% t "Delete" %}</a></td>
</tr>
{% endfor %}
We can also mark translatable strings inside out Django views by importing a function at the top of our python file and then before using it to wrap strings. Here is a snippet of how that can be done.
from transifex.native.django import t
from django.shortcuts import render, redirect
from django.forms import inlineformset_factory
from .filters import OrderFilter
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
def name_of_the_view(request):
output = t("Welcome aboard!")
return render(output)
Now that you have marked all your strings inside your templates and views, it is time to push the to Transifex for translation. Use the command below on your terminal.
<code class="language-python">python3 manage.py transifex push</code>
The command above scans all your project files and collects all translatable strings before pushing them to Transifex.
##############################################################
Transifex Native: Parsing files to detect translatable content
Processed 35 files and found 31 translatable strings in 2 of them.
Pushing 24 unique translatable strings to Transifex...
Processing........
Successfully pushed strings to Transifex.
Created strings: 4
Skipped strings: 20
Now that we have successfully pushed our Translatable content to Transifex, it is time to translate that content before we can pull it back to our site.
Here is what our Django app looks like before localization.
Now, if you navigate to your Transifex project and refresh, you should see the new strings uploaded to your project, as shown below.
And once you are at this stage, you can translate your content by relying either on translators or machine translation. Ideally, a combination of both.
Transifex Native allows you to continuously retrieve translations for your application "over the air" (OTA). This means that you do not need to restart your server. Nor do you have to deploy new code in order to access the latest translations.
When the application is first launched, the integration will populate its internal memory with the current state of translations from Transifex. A background thread is also run to periodically re-fetch translations and update the internal memory accordingly.
To select a different language, we will implement a language picker that you should see on the page we are localizing. This is a simple HTML form that you can add to any HTML file and does not need CSS or JS to work.
{% load i18n %}
{% load transifex %}
<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
<input name="next" type="hidden" value="/" />
<select name="language">
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
{{ language.name_local }} ({{ language.code }})
</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>
For the language hook above to work, we are going to modify our project routes as shown below.
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('accounts.urls')),
path(r'^i18n/', include('django.conf.urls.i18n')), #remember to add this here
]
Now start up the Django application with the command below.
<code class="language-python">python3 manage.py runserver</code>
By default, Transifex Native automatically displays content in the language currently selected in your Django application. In this case, our default language is English(en).
Now, if we select Arabic (ar) our Django application should automatically be translated to Arabic, as shown below.
Since I also selected French as another target language, I can also simply change our Django app to French using the language picker we created.
However, note that you need to have also translated your strings on Transifex as we did earlier. This process does not require us to restart or modify the Django configurations we made earlier.
In conclusion, the Transifex Native Django SDK is a powerful tool that allows developers to easily integrate Transifex into their Django projects.
With the Transifex Native Django SDK, developers can map source strings for translation, retrieve translated strings, and display translations in templates or views.
The SDK also provides command line interface (CLI) commands for pushing translations to Transifex. You also have built-in functions to help developers migrate existing Django apps from Django i18n to Transifex Native.
To use the Transifex Native Django SDK, you need to have a Transifex account and a Django project. Then you'll also have to configure your Django project to use the SDK.
Overall, the Transifex Native Django SDK is a valuable resource for developers looking to manage the localization of their Django projects with Transifex.
This method allows you to send individual batches of phrases for localization, which you can add or update in a pool of phrases accessible through the Content Delivery Service.
By treating these phrases as individual units of content, you can combine content from various applications and access it as a single pool of phrases. Utilizing this fileless transmission, your applications can request batches of translated content for a localized version.
File-based localization has been in use for a long time. But you may find it problematic when working on large projects involving large teams. Fast feature releases and deployments are key in today's complex development environment.
With the Fileless localization approach, you can pull and push content between development and prod environments. All without requiring complete redeployments.
Other key benefits of the fileless localization using Transifex native over the file-based approach include the following: