diff --git a/rtl/unix/clocale.pp b/rtl/unix/clocale.pp
index 38360a3933..dc6ed8388c 100644
--- a/rtl/unix/clocale.pp
+++ b/rtl/unix/clocale.pp
@@ -104,20 +104,28 @@ procedure GetFormatSettings;
     GetLocaleChar := nl_langinfo(item)^;
   end;
 
+  procedure OmitModifiers(const s: string; var i: integer);
+  var
+    l: Integer;
+  begin
+    l := Length(s);
+    //possible flag, with specifier or modifier - glibc exension
+    while (i<=l) and (s[i] in ['0'..'9', '_', '-', '^', '#', 'E', 'O']) do 
+      inc(i);
+  end;
+
   function FindSeparator(const s: string; Def: char): char;
   var
-    i, l: integer;
+    i: integer;
   begin
     FindSeparator := Def;
     i := Pos('%', s);
     if i=0 then
       Exit;
-    l := Length(s);
     inc(i);
-    if (i<=l) and (s[i] in ['E', 'O']) then //possible modifier
-      inc(i);
-    inc(i); 
-    if i<=l then
+    OmitModifiers(s, i);
+    inc(i);
+    if i<=Length(s) then
       FindSeparator := s[i];
   end;
 
@@ -133,8 +141,7 @@ procedure GetFormatSettings;
     while i<=l do begin
       if s[i]='%' then begin
         inc(i);
-        if (i<=l) and (s[i] in ['E', 'O']) then //ignore modifier
-          inc(i);
+        OmitModifiers(s, i);
         if i>l then
           Exit;
         case s[i] of