diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 3a9d5c7132..d356ca574e 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -17,6 +17,14 @@ past entries belonging to these authors: Viktor Szakats. */ +2009-05-08 09:30 UTC+0200 Viktor Szakats (harbour.01 syenar hu) + * utils/hbmk2/hbmk2.prg + ! Fixed to not attempt cycling through all specified languages + if target .po or .hbl filename doesn't contain a language macro. + ! Fixed to strip encoding from LANG value. + * Some changes to modularize language/encoding detection. + (work in progress) + 2009-05-08 07:48 UTC+0200 Viktor Szakats (harbour.01 syenar hu) * source/rtl/tclass.prg % All loops optimized to use FOR EACH. diff --git a/harbour/utils/hbmk2/hbmk2.prg b/harbour/utils/hbmk2/hbmk2.prg index af61714a04..4c7dd973c7 100644 --- a/harbour/utils/hbmk2/hbmk2.prg +++ b/harbour/utils/hbmk2/hbmk2.prg @@ -120,6 +120,8 @@ #define _COMPDETE_cCOMP 3 #define _COMPDETE_cCCPREFIX 4 +#define _LNG_MARKER "${lng}" + #define _WORKDIR_DEF_ ".hbmk" ANNOUNCE HB_GTSYS @@ -149,6 +151,7 @@ STATIC s_lTRACE := .F. STATIC s_lDONTEXEC := .F. STATIC s_lXHB := .F. STATIC s_cUILNG +STATIC s_cUICDP STATIC s_lDEBUGTIME := .F. STATIC s_lDEBUGINC := .F. @@ -410,22 +413,16 @@ FUNCTION hbmk( aArgs ) LOCAL nStart := Seconds() - IF Empty( s_cUILNG := GetEnv( "LC_ALL" ) ) - IF Empty( s_cUILNG := GetEnv( "LC_MESSAGES" ) ) - IF Empty( s_cUILNG := GetEnv( "LANG" ) ) - s_cUILNG := "en_EN" - ENDIF - ENDIF - ENDIF + GetUILangCDP( @s_cUILNG, @s_cUICDP ) - IF !( s_cUILNG == "en_EN" ) + IF !( s_cUILNG == "en-EN" ) tmp := "${hb_root}hbmk2.${lng}.hbl" tmp := StrTran( tmp, "${hb_root}", PathSepToSelf( DirAddPathSep( hb_DirBase() ) ) ) - tmp := StrTran( tmp, "${lng}", s_cUILNG ) + tmp := StrTran( tmp, "${lng}", StrTran( s_cUILNG, "-", "_" ) ) IF hb_i18n_check( tmp := hb_MemoRead( tmp ) ) hb_i18n_set( hb_i18n_restoretable( tmp ) ) ENDIF - hb_cdpSelect( SubStr( I_( "cdp=EN" ), Len( "cdp=" ) + 1 ) ) + hb_cdpSelect( s_cUICDP ) ENDIF IF Empty( aArgs ) @@ -5101,8 +5098,6 @@ STATIC FUNCTION rtlnk_process( cCommands, cFileOut, aFileList, aLibList, ; /* .hbl generation */ -#define _LNG_MARKER "${lng}" - STATIC PROCEDURE MakePO( aLNG, cPO, aPOTIN ) LOCAL cLNG LOCAL fhnd @@ -5112,7 +5107,7 @@ STATIC PROCEDURE MakePO( aLNG, cPO, aPOTIN ) LOCAL aNew := {} LOCAL aUpd := {} - FOR EACH cLNG IN iif( Empty( aLNG ), { _LNG_MARKER }, aLNG ) + FOR EACH cLNG IN iif( Empty( aLNG ) .OR. !( _LNG_MARKER $ cPO ), { _LNG_MARKER }, aLNG ) IF cLNG:__enumIndex() == 1 IF s_lDEBUGI18N hbmk_OutStd( hb_StrFormat( "MakePO: file .pot list: %1$s", ArrayToList( aPOTIN, ", " ) ) ) @@ -5183,7 +5178,7 @@ STATIC PROCEDURE MakeHBL( aPO, cHBL, aLNG ) cHBL := FN_ExtSet( cHBL, ".hbl" ) ENDIF - FOR EACH cLNG IN iif( Empty( aLNG ), { _LNG_MARKER }, aLNG ) + FOR EACH cLNG IN iif( Empty( aLNG ) .OR. !( _LNG_MARKER $ cHBL ), { _LNG_MARKER }, aLNG ) tLNG := NIL hb_FGetDateTime( StrTran( cHBL, _LNG_MARKER, cLNG ), @tLNG ) aPO_TODO := {} @@ -5440,13 +5435,35 @@ FUNCTION hbmk_KEYW( cKeyword ) RETURN .F. +/* TODO: Extend for rest of platforms, add proper CDP detection */ + +STATIC PROCEDURE GetUILangCDP( /* @ */ cLNG, /* @ */ cCDP ) + LOCAL tmp + + IF Empty( cLNG := GetEnv( "LC_ALL" ) ) + IF Empty( cLNG := GetEnv( "LC_MESSAGES" ) ) + IF Empty( cLNG := GetEnv( "LANG" ) ) + cLNG := "en-EN" + ENDIF + ENDIF + ENDIF + + /* Strip encoding information */ + IF ( tmp := At( ".", cLNG ) ) > 0 + cLNG := Left( cLNG, tmp - 1 ) + ENDIF + cLNG := StrTran( cLNG, "_", "-" ) + cCDP := Upper( SubStr( I_( "cdp=EN" ), Len( "cdp=" ) + 1 ) ) + + RETURN + STATIC PROCEDURE ShowHeader() OutStd( "Harbour Make " + HBRawVersion() + hb_osNewLine() +; "Copyright (c) 1999-2009, Viktor Szakats" + hb_osNewLine() +; "http://www.harbour-project.org/" + hb_osNewLine() ) - IF !( s_cUILNG == "en_EN" ) + IF !( s_cUILNG == "en-EN" ) OutStd( hb_StrFormat( I_( "Translation (%1$s): (add your name here)" ), s_cUILNG ), hb_osNewLine() ) ENDIF