webForumDet fria alternativet

Byta Engelska Dagar/Månader mot Svenska Dagar/Månader

PHP

16 svar · 981 visningar · startad av richardjoha

Medlem sedan okt. 2005787 inlägg
Frågan#1

Har laddat ner ett kalenderskript och försöker förstå hur det är uppbyggt.
Som detta skriptet ser ut är Månader och dagar på engelska ex, Monday, Tusday, May October etc.

Frågorna lyder:

  1. Vilken del av koden bestämmer att de ska vara på engelska?

  2. Hur skulle man gå tillväga för att få dem på svenska i stället?

Medlem sedan okt. 2005787 inlägg
#2

Här är koden.
http://member.webforum.nu/9464/kod.txt

Medlem sedan juli 20033 147 inlägg
#3

Eftersom du kör datumet med mktime() kan du testa att lägga

setlocale(LC_ALL, 'swedish');

...eller...

setlocale(LC_ALL, 'se');

...eller...

setlocale(LC_ALL, 'swe');

högst upp på sidan. :)

Medlem sedan okt. 2005787 inlägg
#4

Testar direkt Melea.

3 minuter tog det att få svar. IMPONERANDE!

Medlem sedan okt. 2005787 inlägg
#5

testade alla tre alternativen utan lyckat resultat..

<?php

[B]setlocale(LC_ALL, 'swedish');[/B]

require ("jcal_config/config_inc.php");
// connect to the database
$conn = mysql_connect($db_host, $db_user, $db_pass) or die("Could not connect to database!");
mysql_select_db($db, $conn);
?>

Melea har du något mer förslag?

Medlem sedan juli 20033 147 inlägg
#6

Doh! ;) Du får vänta tills imorgon, natti natti för min del.

Sov gott!

Medlem sedan nov. 20016 480 inlägg
#7

Typ:

<?
// Arrayer med replace-grejer -->
$dateSearch = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
$dateReplace = array("Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag", "Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December");

// Applicera på din datumvariabel eller om du som i det här fallet använder date()  -->
echo str_replace($dateSearch,$dateReplace,[b]date("l, j F Y")[/b]);
?>
Medlem sedan okt. 2005787 inlägg
#8

Är det här

//clean input
if (isset($_GET['month'])) { $month = $_GET['month']; $month = ereg_replace ("[[:space:]]", "", $month); $month = ereg_replace ("[[:punct:]]", "", $month); $month = ereg_replace ("[[:alpha:]]", "", $month); }
if (isset($_GET['year'])) { $year = $_GET['year']; $year = ereg_replace ("[[:space:]]", "", $year); $year = ereg_replace ("[[:punct:]]", "", $year); $year = ereg_replace ("[[:alpha:]]", "", $year); if ($year < 1990) { $year = 1990; } if ($year > 2035) { $year = 2035; } }
if (isset($_GET['today'])) { $today = $_GET['today']; $today = ereg_replace ("[[:space:]]", "", $today); $today = ereg_replace ("[[:punct:]]", "", $today); $today = ereg_replace ("[[:alpha:]]", "", $today); }

jag ska skriva in:

str_replace($dateSearch,$dateReplace

Har inte sysslat mycket med php utan håller på att försöka lära mig, så ni får ha överseende med detta ;)

Medlem sedan jan. 2005110 inlägg
#9

Melea skrev:

Eftersom du kör datumet med mktime() kan du testa att lägga

setlocale(LC_ALL, 'swedish');

Setlocale() har väl ingen påverkan på mktime()??? Det är ju först när datumet ska skrivas ut som setlocale() har någon verkan!

Anledningen till att setlocale() inte fungerar i detta fallet är att man använder date() för att skriva ut datumen. Date() tar inte hänsyn till setlocale(). Det gör däremot strftime(). Byt därför ut date() mot strftime() på alla ställen, eller iallafall de ställen som skriver ut text.

EX:
$daylong = strftime("%A",mktime(1,1,1,$month,$today,$year));
$monthlong = strftime("%B",mktime(1,1,1,$month,$today,$year));

Vill du ha stor bokstav i början av veckdagsnamnet/månadsnamnet (månadsnamn ska ej börja med stor bokstav på korrekt svenska egentligen om jag inte minns fel):

$daylong = ucfirst( strftime("%A",mktime(1,1,1,$month,$today,$year)) );
$monthlong = ucfirst( strftime("%B",mktime(1,1,1,$month,$today,$year)) );

Medlem sedan juli 20033 147 inlägg
#10

Bah, så var det. ;) Skyller på att det var sent :r

Medlem sedan okt. 2005787 inlägg
#11

När jag byter ut date() mot strftime() skrivs inte månaden ut på engelska längre, det enda som skrivs ut är F. Vad har jag missat?

$monthlong = strftime("%F",mktime(1,1,1,$month,$today,$year));
//display name of month
echo "<table border=\"0\" cellpadding=\"2\" cellspacing=\"1\" bgcolor=\"black\" width=\"250\">\n<tr>\n";
echo "<td class=\"cellbg\" colspan=\"7\" valign=\"middle\" align=\"center\"><font class=\"regheading\"><b>" . strftime("F",mktime(1,1,1,$month,1,$year)) . "</b></font>\n</td>\n";
echo "</tr>\n<tr>\n";
Medlem sedan aug. 20002 975 inlägg
#12

Testa med %B istället för %F om du vill ha månadsnamn.
http://www.php.net/manual/en/function.strftime.php

Medlem sedan okt. 2005787 inlägg
#13

%B fungerar på engelska fast jag vill ha Maj i stället för May, alltså månadens namn på svenska..

Medlem sedan aug. 20002 975 inlägg
#14

Då är det rätt vad det gäller strftime(), men du måste däremot använda något annat värde på setlocale().

Testa följande tre varianter, någon av dom brukar för det mesta fungera (dock inte alltid):

setlocale( LC_ALL, 'sv_SE.ISO8859-1' );
// eller
setlocale( LC_ALL, 'swedish' );
// eller
setlocale( LC_ALL, 'sv_SE' );
Medlem sedan okt. 2005787 inlägg
#15

var i koden ska setlocale vara?

setlocale( LC_ALL, 'sv_SE.ISO8859-1' ); 
// eller 
setlocale( LC_ALL, 'swedish' ); 
// eller 
setlocale( LC_ALL, 'sv_SE' );
Medlem sedan aug. 20002 975 inlägg
#16

Innan du använder strftime() första gången.

Du ska bara använda en av ovanstående setlocale().

Medlem sedan okt. 2005787 inlägg
#17

Detta var lösningen.

tack för hjälpen alla :D

setlocale( LC_ALL, 'swedish' );
256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)