PHP ile Zamanı Arapça/Rusça/Fransızca/Türkçe Göstermek

Baştan kabul ederim ki PHP bilgim çok fazla değil. Kesin daha efektif bir yöntem bilen vardır.

Bir müşterimiz için hazırlamakta olduğumuz web sitesi için sitemizin tarih ve saatini 1 Ocak 2000, 12.10 formatında göstermemiz gerekiyor.

PHP ile Türkçe ay ve gün göstermek ile ilgili bir makale yazılmış, lakin kimse Arapça, Rusça, Fransızca için bunu yapmamış.

Rusça ve Fransızca sadece ay ve gün isminde beni zorlarken Arapça sadece ay ismi değil, rakamlarda da baş ağrıtmayı başarıyor.

Elde ettiğim sonuçlar şunlar (Tr/En/Ru/Ar/Fr)

5 Ocak 2014, 15:22
5 January 2014, 15:23
5 января 2014, 15:24
٥ يناير ٢٠١٤ ,١٥:٢٤
5 janvier 2014, 15:25

Bulduğum yöntem ve yazdığım fonksiyonlar şunlar.

Gereklilikler:
– PHP 5.3.0 > büyük bir sürüm
– PHP-intl paketinin kurulu olması (Ubuntu 13.10 için. Debian temelli olmayan dağıtımlarda farklı bir isimle yer alabilir)

Ayarlar

Sitemizin ayarlar kısmına şöyle yeni bir ayar ekliyoruz

	//Uyarı: Bu özelliği etkinleştirmek için
	//php 5.3.1 > özelliklere sahip bir sunucu gereklidir
	//ilaveten php-intl paketinin kurulu olması gerekmektedir
	//php-intl paketi kurulu değil ise aktif etmeyin!
	//1 aktif, 0 pasif
	define('PHP_INTL_PACK',			1);

Sonrasında fonksiyonlarımızı tanımlıyoruz

	function time_turkish($time)
	{
		/**
		| girilen zaman dilimini türkçe zamana dönüştürür
		| site_header.php dosyasında kullanılıyor
		|
		*/
		if(PHP_INTL_PACK == 1)
		{
			//---[ + ]--- tehlikeli fonksiyon ---
			/**
			| Not: Bu fonksiyon php-intl paketine ihtiyaç duymaktadır.
			| Her sunucuda çalışmayacaktır.
			*/
			$fmt = datefmt_create("tr", IntlDateFormatter::FULL,
				IntlDateFormatter::FULL, 'Europe/Istanbul',
				IntlDateFormatter::GREGORIAN, "d MMMM yyyy, HH:mm");
			return datefmt_format($fmt, $time);
			//---[ - ]--- tehlikeli fonksiyon ---
		}
		else
		{
			$aylar = array(
				1	=>	'Ocak',
				2	=>	'Şubat',
				3	=>	'Mart',
				4	=>	'Nisan',
				5	=>	'Mayıs',
				6	=>	'Haziran',
				7	=>	'Temmuz',
				8	=>	'Ağustos',
				9	=>	'Eylül',
				10	=>	'Ekim',
				11	=>	'Kasım',
				12	=>	'Aralık',
			);
			/*
			$gunler = array(
				1	=>	'Pazartesi',
				2	=>	'Salı',
				3	=>	'Çarşamba',
				4	=>	'Perşembe',
				5	=>	'Cuma',
				6	=>	'Cumartesi',
				0	=>	'Pazar',
			);
			*/
			
			$gun		= date('j', $time);
			//$gun_ad	= $gunler[date('j', $time)];
			//$ay		= date('n', $time);
			$ay_ad		= $aylar[date('n', $time)];
			$yil		= date('Y', $time);
			$saat 		= date('H.i', $time);

			$tarih 		= "$gun $ay_ad $yil, $saat";
			return $tarih;
		}
	}
		
	function time_russian($time)
	{
		/**
		| girilen zaman dilimini rusça zamana dönüştürür
		| site_header.php dosyasında kullanılıyor
		|
		*/
		if(PHP_INTL_PACK == 1)
		{
			//---[ + ]--- tehlikeli fonksiyon ---
			/**
			| Not: Bu fonksiyon php-intl paketine ihtiyaç duymaktadır.
			| Her sunucuda çalışmayacaktır.
			*/
			$fmt = datefmt_create("ru", IntlDateFormatter::FULL,
				IntlDateFormatter::FULL, 'Europe/Istanbul',
				IntlDateFormatter::GREGORIAN, "d MMMM yyyy, HH:mm");
			return datefmt_format($fmt, $time);
			//---[ - ]--- tehlikeli fonksiyon ---
		}
		else
		{
			$aylar = array( 
				1	=>	'Январь',
				2	=>	'Февраль', 
				3	=>	'Март',
				4	=>	'Апрель',
				5	=>	'Май', 
				6	=>	'Июнь',
				7	=>	'Июль', 
				8	=>	'Август',
				9	=>	'Сентябрь',
				10	=>	'Октябрь', 
				11	=>	'Ноябрь',
				12	=>	'Декабрь',
			);
			
			/*
			$gunler = array(
				1	=>	'Понедельник',
				2	=>	'Вторник',
				3	=>	'Среда',
				4	=>	'Четверг',
				5	=>	'Пятница',
				6	=>	'Суббота',
				0	=>	'Воскресенье',
			);
			*/
			
			$gun		= date('j', $time);
			//$gun_ad	= $gunler[date('j', $time)];
			//$ay		= date('n', $time);
			$ay_ad		= $aylar[date('n', $time)];
			$yil		= date('Y', $time);
			$saat 		= date('H.i', $time);

			$tarih 		= "$gun $ay_ad $yil, $saat";
			return $tarih;
		}
	}

	function time_english($time)
	{
		/**
		| girilen zaman dilimini ingilizce zamana dönüştürür
		| t_site_header.php dosyasında kullanılıyor
		|
		*/	

		return date("j F Y, H:i", $time);;
	}
	
	function time_france($time)
	{
		/**
		| girilen zaman dilimini fransızca zamana dönüştürür
		| site_header.php dosyasında kullanılıyor
		|
		*/	

		if(PHP_INTL_PACK == 1)
		{
			//---[ + ]--- tehlikeli fonksiyon ---
			/**
			| Not: Bu fonksiyon php-intl paketine ihtiyaç duymaktadır.
			| Her sunucuda çalışmayacaktır.
			*/
			$fmt = datefmt_create("fr", IntlDateFormatter::FULL,
				IntlDateFormatter::FULL, 'Europe/Istanbul',
				IntlDateFormatter::GREGORIAN, "d MMMM yyyy, HH:mm");
			return datefmt_format($fmt, $time);
			//---[ - ]--- tehlikeli fonksiyon ---
		}
		else
		{
			$aylar = array( 
				1	=>	'Janvier',
				2	=>	'Février', 
				3	=>	'Mars',
				4	=>	'Avril',
				5	=>	'Mai', 
				6	=>	'Juin',
				7	=>	'Juillet', 
				8	=>	'Août',
				9	=>	'Septembre',
				10	=>	'Octobre', 
				11	=>	'Novembre',
				12	=>	'Décembre',
			);
			
			/*
			$gunler = array(
				1	=>	'Lundi',
				2	=>	'Mardi',
				3	=>	'Mercredi',
				4	=>	'Jeudi',
				5	=>	'Vendredi',
				6	=>	'Samedi',
				0	=>	'Dimanche',
			);
			*/
			
			$gun		= date('j', $time);
			//$gun_ad	= $gunler[date('j', $time)];
			//$ay		= date('n', $time);
			$ay_ad		= $aylar[date('n', $time)];
			$yil		= date('Y', $time);
			$saat 		= date('H.i', $time);

			$tarih 		= "$gun $ay_ad $yil, $saat";
			return $tarih;
		}
	}	
	
	function time_arabic($time)
	{
		/**
		| girilen zaman dilimini arapça zamana dönüştürür
		| site_header.php dosyasında kullanılıyor
		|
		*/	

		if(PHP_INTL_PACK == 1)
		{
			//---[ + ]--- tehlikeli fonksiyon ---
			/**
			| Not: Bu fonksiyon php-intl paketine ihtiyaç duymaktadır.
			| Her sunucuda çalışmayacaktır.
			*/
			$fmt = datefmt_create("ar", IntlDateFormatter::FULL,
				IntlDateFormatter::FULL, 'Europe/Istanbul',
				IntlDateFormatter::GREGORIAN, "d MMMM yyyy ,HH:mm");
			return datefmt_format($fmt, $time);
			//---[ - ]--- tehlikeli fonksiyon ---
		}
		else
		{
			//georgian şeklinde göstermek için bunu kullanabilirsiniz
			return date("j F Y, H:i",$time);
		}
	}	

Zamanı göstereceğimiz zaman uygun fonksiyonumuzu çağırıyoruz.

			< ?php if($lang == TR){?> 
  • < ?=time_turkish(time());?>
  • < ?}?> < ?php if($lang == EN){?>
  • < ?=time_english(time());?>
  • < ?}?> < ?php if($lang == RU){?>
  • < ?=time_russian(time());?>
  • < ?}?> < ?php if($lang == AR){?>
  • < ?=time_arabic(time());?>
  • < ?}?> < ?php if($lang == FR){?>
  • < ?=time_france(time());?>
  • < ?}?>

    Not: Özgürce kullanabilirsiniz.

    6 yorum

    1. setlocale() ile ilgili dili setleyip tarih ayı ve günü o dilde çıkartabilirsiniz.

      Örneğin Rusça için:
      setlocale(LC_TIME, “ru_RU.UTF-8”);
      echo strftime(“%d %B %Y %A”);

      Tıpkı intl kullanabilmek için php-intl paketinin kurulu olması gibi setlocale’de de tanımlanacak ilgili dil sistemde varolmalı.

      Not: PHP’nin eski versiyonlarında setlocale() fonksiyonu Türkçede sorun çıkartıyor. Sadece Türkçe için ekstra bir fix yapabilirsiniz.

      1. setlocale ile tanımlamaktan bahseden olmuş. Lakin ilgili dil sistemde varolmalı! şartını nasıl yerine getirtebiliriz ki! Shared/Paylaşımlı bir sunucuda bu mümkün görünmüyor.

        Tabii php-intl paketini veya innodb desteğini de! natro hosting firmasına kurdurmak da bir o kadar zor 🙂

        1. Zaten

          “Tıpkı intl kullanabilmek için php-intl paketinin kurulu olması gibi setlocale’de de tanımlanacak ilgili dil sistemde varolmalı.”

          cümlesinde sizin dediğiniz dedim.

      1. Captha kodundan kastınızı anlayamadım. Yayınladığım arasında captha kodu yok. Ama yorum alanındakini diyorsanız Google hazretleri ne sağlıyorsa onu kullanıyoruz 🙁

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir