<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aleksa Krstic</title>
    <description>The latest articles on DEV Community by Aleksa Krstic (@aleksakrstic).</description>
    <link>https://dev.to/aleksakrstic</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F503796%2F9b8eb0a8-9a30-4f8a-8fcd-b0d05f523b39.jpg</url>
      <title>DEV Community: Aleksa Krstic</title>
      <link>https://dev.to/aleksakrstic</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aleksakrstic"/>
    <language>en</language>
    <item>
      <title>Django Translation tutorial with an example</title>
      <dc:creator>Aleksa Krstic</dc:creator>
      <pubDate>Tue, 13 Apr 2021 11:26:19 +0000</pubDate>
      <link>https://dev.to/localizely/django-translation-tutorial-a-working-example-52a8</link>
      <guid>https://dev.to/localizely/django-translation-tutorial-a-working-example-52a8</guid>
      <description>&lt;p&gt;We noticed there are some unanswered questions on Django internationalization (i18n) topic. So we created a working example with Django Translation usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example explains
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Django Translation setup&lt;/li&gt;
&lt;li&gt;i18n inside python code&lt;/li&gt;
&lt;li&gt;i18n inside Django templates&lt;/li&gt;
&lt;li&gt;i18n inside Javascript code&lt;/li&gt;
&lt;li&gt;How to easily manage translations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Github repo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/localizely/django_i18n_example"&gt;https://github.com/localizely/django_i18n_example&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Full article on Django internationalization
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://localizely.com/blog/django-i18n-tutorial/"&gt;https://localizely.com/blog/django-i18n-tutorial/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>django</category>
      <category>python</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Flutter localization</title>
      <dc:creator>Aleksa Krstic</dc:creator>
      <pubDate>Tue, 03 Nov 2020 22:54:01 +0000</pubDate>
      <link>https://dev.to/localizely/flutter-localization-p23</link>
      <guid>https://dev.to/localizely/flutter-localization-p23</guid>
      <description>&lt;p&gt;Flutter is a cross-platform technology that promises a lot. However, during its early days it didn't have practical localization support and many unofficial solutions were created. In this article we are going through streamlined Flutter localization that relies on official Intl package and ARB files.&lt;/p&gt;

&lt;p&gt;The easiest way to localize your Flutter app is to use &lt;strong&gt;Flutter Intl&lt;/strong&gt; extension for &lt;a href="https://marketplace.visualstudio.com/items?itemName=localizely.flutter-intl"&gt;VS Code&lt;/a&gt; or &lt;a href="https://plugins.jetbrains.com/plugin/13666-flutter-intl"&gt;Android Studio&lt;/a&gt;. It does a lot of work for you, and brings you some functionalities, such as autocomplete suggestions for the string keys in Dart code, extraction of strings from Dart code to ARB files, etc. &lt;/p&gt;

&lt;h3&gt;
  
  
  1. Initialize plugin for your project
&lt;/h3&gt;

&lt;p&gt;Go to &lt;strong&gt;Tools | Flutter Intl&lt;/strong&gt; and run &lt;strong&gt;Initialize for the Project&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Add dependency
&lt;/h3&gt;

&lt;p&gt;Add following dependency to &lt;code&gt;pubspec.yaml&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;flutter_localizations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;sdk&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;flutter&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Set &lt;code&gt;localizationsDelegates&lt;/code&gt; and &lt;code&gt;supportedLocales&lt;/code&gt; for your &lt;code&gt;MaterialApp&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter_localizations/flutter_localizations.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'generated/l10n.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nd"&gt;@override&lt;/span&gt;
    &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="nl"&gt;localizationsDelegates:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;GlobalMaterialLocalizations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;GlobalWidgetsLocalizations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;GlobalCupertinoLocalizations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delegate&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="nl"&gt;supportedLocales:&lt;/span&gt; &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delegate&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;supportedLocales&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;MyHomePage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="s"&gt;'Flutter Demo Home Page'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Add string keys to main ARB file
&lt;/h3&gt;

&lt;p&gt;Your main ARB file by default is &lt;code&gt;lib/l10n/intl_en.arb&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hello world!"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is more info about &lt;a href="https://localizely.com/flutter-arb/"&gt;ARB file syntax&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Reference the keys in Dart code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;S&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;title&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's all 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Translation management for Flutter apps
&lt;/h2&gt;

&lt;p&gt;As you start adding more locales to your app, the translation management becomes complicated. Check out the original article &lt;a href="https://localizely.com/flutter-localization-workflow/"&gt;Flutter Localization&lt;/a&gt; from &lt;a href="https://localizely.com"&gt;Localizely&lt;/a&gt; for more info on simplified translation management.&lt;/p&gt;

&lt;p&gt;If you need to manage translations over-the-air, without building and releasing a new app version for simple text changes, take a look at &lt;a href="https://localizely.com/flutter-over-the-air/"&gt;Flutter over-the-air translation updates&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>localization</category>
      <category>i18n</category>
    </item>
  </channel>
</rss>
