<?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>Forem: E. Berke KARAGÖZ</title>
    <description>The latest articles on Forem by E. Berke KARAGÖZ (@berkekaragoz).</description>
    <link>https://forem.com/berkekaragoz</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%2F342636%2F71720bbc-dc6b-4946-9422-f081c910a5a7.jpeg</url>
      <title>Forem: E. Berke KARAGÖZ</title>
      <link>https://forem.com/berkekaragoz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/berkekaragoz"/>
    <language>en</language>
    <item>
      <title>Linux Dil Sistemi ve Kontrolcüsü</title>
      <dc:creator>E. Berke KARAGÖZ</dc:creator>
      <pubDate>Fri, 28 Feb 2020 13:23:49 +0000</pubDate>
      <link>https://forem.com/aciklab/linux-dil-sistemi-ve-kontrolcusu-25n1</link>
      <guid>https://forem.com/aciklab/linux-dil-sistemi-ve-kontrolcusu-25n1</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Dil Sistemi Nasıl İşler?

&lt;ul&gt;
&lt;li&gt;Komutlar&lt;/li&gt;
&lt;li&gt;Dosyalar&lt;/li&gt;
&lt;li&gt;Özet&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Yerel Dil Kontrolcüsü&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dil Sistemi Nasıl İşler?
&lt;/h2&gt;

&lt;p&gt;Bilinmesi gereken ana &lt;strong&gt;3 komut&lt;/strong&gt; ve &lt;strong&gt;2 dosya&lt;/strong&gt; vardır:&lt;/p&gt;

&lt;h5&gt;
  
  
  Komutlar
&lt;/h5&gt;

&lt;p&gt;1 - &lt;code&gt;locale&lt;/code&gt;: Sistemin bölümlerinin hangi dil ayarlarında bulunduklarını tutan değişkenleri gösterir.&lt;br&gt;
2 - &lt;code&gt;locale -a&lt;/code&gt;: Sistemde hazırda yüklü olan dil paketlerini listeler.&lt;br&gt;
3 - &lt;code&gt;sudo locale-gen&lt;/code&gt;: &lt;strong&gt;&lt;code&gt;/etc/locale.gen&lt;/code&gt;&lt;/strong&gt; dosyasındaki listelenmiş diller yüklü değil ise yükler.&lt;/p&gt;
&lt;h5&gt;
  
  
  Dosyalar
&lt;/h5&gt;

&lt;p&gt;1 - &lt;code&gt;/etc/default/locale&lt;/code&gt;: üstte bulunan &lt;strong&gt;&lt;code&gt;locale&lt;/code&gt;&lt;/strong&gt; komutunun referans ettiği dosyadır. İçinde, POSIX ve GNU C kütüphanesi tarafından kategorize edilmiş kısımların dil değerlerini içerir. Bu değerlere göre, okunduğu zaman, eğer dil paketleri yüklü ise dil ayarlarını değerlere göre değiştirir. &lt;strong&gt;&lt;code&gt;LANG&lt;/code&gt;&lt;/strong&gt; değeri sistem ana yerel dilini belirlemekte kullanılır.  &lt;/p&gt;

&lt;p&gt;İlk dört satırı aşağıdaki gibidir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LANG=tr_TR.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="tr_TR.UTF-8"
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;2 - &lt;code&gt;/etc/locale.gen&lt;/code&gt;: İçinde yüklenmesi için bulunan dil paketleri listesini bulundurur. &lt;strong&gt;&lt;code&gt;sudo locale-gen&lt;/code&gt;&lt;/strong&gt; komutu çalıştırıldığında, yorumlama içine (&lt;code&gt;#&lt;/code&gt;) alınmamış olan dil değerlerini bu dosyadan okur ve hangi dilleri yükleyeceğine bu dosyadan karar verir. Varsayılan olarak &lt;code&gt;/usr/share/i18n/SUPPORTED&lt;/code&gt; dosyasındaki dil listesini alır ve yüklü olmayanları yorum içinde barındırır.&lt;/p&gt;

&lt;p&gt;Dosyanın içeriği aşağıdaki gibidir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
# tr_TR ISO-8859-9
tr_TR.UTF-8 UTF-8
# ts_ZA UTF-8
# tt_RU UTF-8
...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h5&gt;
  
  
  Özet
&lt;/h5&gt;

&lt;p&gt;Sistem açılırken &lt;code&gt;locale&lt;/code&gt; dosyasından sistem bölmelerinin dil değerlerini okur ve yüklü dil paketlerinden yazıları değiştirir. Buradaki dil değerlerini değiştirip, bilgisayarı yeniden başlatarak, sistem bölmelerinin de dilleri değiştirilebilir. Yüklü dil paketleri &lt;code&gt;locale -a&lt;/code&gt; ile kontrol edilebilir. Eğer yüklü olmayan bir dil paketi kullanılmak isteniyorsa, &lt;code&gt;locale.gen&lt;/code&gt; dosyasına yüklenmek istenen dili ekledikten sonra &lt;code&gt;sudo locale-gen&lt;/code&gt; ile o listedeki diller yüklenebilir.&lt;/p&gt;

&lt;h2&gt;
  
  
  Yerel Dil Kontrolcüsü
&lt;/h2&gt;

&lt;p&gt;Kaynak: &lt;a href="https://github.com/BerkeKaragoz/EN-TR-Locale-Verifier"&gt;https://github.com/BerkeKaragoz/EN-TR-Locale-Verifier&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bu yazılım sistem diline bakarak, İngilizce veya Türkçe olmak üzere dil paketlerini doğrular. Dil paketleri yüklü değilse yükler, değerler hata vermeye yatkın ise düzeltir. &lt;strong&gt;C&lt;/strong&gt; ve &lt;strong&gt;Shell Scripting&lt;/strong&gt; ile yazılmıştır.&lt;/p&gt;

&lt;p&gt;Yazılımın yeterli yetkilerin olup olmadığını kontrol ettikten sonra &lt;code&gt;locale&lt;/code&gt;'den  &lt;code&gt;LANG&lt;/code&gt; değerine bakarak sistem dilini öğrenir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Get the locale LANG&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;lang_value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;run_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"cat /etc/default/locale 2&amp;gt; /dev/null | grep '^LANG=' | cut -d '=' -f2 | tr '&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;n' '&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s"&gt;0'"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;char* run_command(char* command)&lt;/code&gt; özel fonksiyonu ise &lt;strong&gt;Shell&lt;/strong&gt; komutlarını çalıştırır ve çıktılarını geri döndürür.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;lang_value&lt;/code&gt;'ye &lt;code&gt;LANG&lt;/code&gt; değerini atadıktan sonra hangi dil paketlerinin yüklü olması gerektiğine karar verir. Eğer &lt;code&gt;LANG&lt;/code&gt; değerini tanıyamazsa İngilizce'ye çevirir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="cp"&gt;#define LANG_TR_TR "tr_TR.UTF-8" // Dil kodu
#define LOCALE_TURKISH // Doğrulanmış olan 'locale' değerleri
&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="c1"&gt;// Extract the LANGs needed to be installed after verifying&lt;/span&gt;
&lt;span class="kt"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;ln_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// ln == locales_needed&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;locales_needed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;strcmp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lang_value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LANG_TR_TR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt;
    &lt;span class="n"&gt;extract_charmaps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LOCALE_TURKISH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ln_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;extract_charmaps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LOCALE_ENGLISH&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ln_count&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Gerekli dil paketleri &lt;code&gt;locales_needed&lt;/code&gt; değişkenine atandıktan sonra tek tek dil paketlerinin yüklü olup olmadığı kontrol edilir. Eğer yüklü değilse komut satırına bildirimi yazılır ve &lt;code&gt;locale.gen&lt;/code&gt; listesine &lt;code&gt;void add_lang_to_localegen(char* lang)&lt;/code&gt; özel fonksiyonu ile eklenir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Check if the LANG is installed -&amp;gt; locale -a&lt;/span&gt;
&lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;locale_installed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;is_locale_gen_needed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;ln_i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ln_i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;ln_count&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;ln_i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt; &lt;span class="c1"&gt;//-1 for null&lt;/span&gt;
  &lt;span class="c1"&gt;// $ locale -a 2&amp;gt; /dev/null | grep -i LANG&lt;/span&gt;
  &lt;span class="n"&gt;locale_installed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;search_locale_installed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;locales_needed&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ln_i&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;locale_installed&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sc"&gt;'\0'&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
    &lt;span class="n"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Locale '%s' is not installed.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;locales_needed&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ln_i&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="n"&gt;is_locale_gen_needed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;add_lang_to_localegen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;locales_needed&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;ln_i&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="n"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;locale_installed&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="c1"&gt;// for&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Yukarıdaki &lt;code&gt;void add_lang_to_localegen(char* lang)&lt;/code&gt; özel fonksiyonu aşağıdakine denk bir &lt;strong&gt;Shell&lt;/strong&gt; komutu çalıştır. Bu komut, &lt;code&gt;/usr/share/i18n/SUPPORTED&lt;/code&gt; listesinden dil kodlarına bakar. Alınan dil kodu değerini &lt;code&gt;locale.gen&lt;/code&gt; listesine kendisinin kopyası olmadan ekler.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ search&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"^lang&lt;/span&gt;&lt;span class="se"&gt;\.&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;result&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nv"&gt;$search&lt;/span&gt; /usr/share/i18n/SUPPORTED&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; /etc/locale.gen | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/locale.gen &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /etc/locale.gen &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Gerekli paketler &lt;code&gt;locale.gen&lt;/code&gt; listesine eklendikten sonra &lt;code&gt;run_command("sudo locale-gen")&lt;/code&gt; ile gerekli dil paketleri yüklenir. Onaylandıktan sonra, &lt;code&gt;lang_value&lt;/code&gt; değerine göre hangi dilin doğrulanmış değerlerinin (örn: &lt;code&gt;LOCALE_TURKISH&lt;/code&gt;) &lt;code&gt;locale&lt;/code&gt; dosyasına yazılacağı karar verilerek yazılır.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Son&lt;/em&gt;&lt;/p&gt;

</description>
      <category>turkish</category>
      <category>linux</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
