summaryrefslogtreecommitdiff
path: root/toolkit/source/layout/core/translate.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/source/layout/core/translate.cxx')
-rw-r--r--toolkit/source/layout/core/translate.cxx130
1 files changed, 130 insertions, 0 deletions
diff --git a/toolkit/source/layout/core/translate.cxx b/toolkit/source/layout/core/translate.cxx
new file mode 100644
index 000000000000..fa09d02190d2
--- /dev/null
+++ b/toolkit/source/layout/core/translate.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "translate.hxx"
+
+#include <list>
+#if TEST_LAYOUT
+#include <cstdio>
+#include "tools/getprocessworkingdir.hxx"
+#endif
+
+#include <unotools/bootstrap.hxx>
+#include <unotools/localfilehelper.hxx>
+#include <unotools/ucbhelper.hxx>
+#include <vcl/svapp.hxx>
+
+#include "proplist.hxx"
+
+namespace layoutimpl
+{
+namespace css = ::com::sun::star;
+using namespace css;
+using ::rtl::OUString;
+using ::utl::LocalFileHelper;
+using ::utl::UCBContentHelper;
+using ::utl::Bootstrap;
+
+static std::list<OUString>
+getLocaleSubdirList( lang::Locale const& rLocale )
+{
+ std::list<OUString> aSubdirs;
+ aSubdirs.push_front( OUString::createFromAscii( "." ) );
+ aSubdirs.push_front( OUString::createFromAscii( "en-US" ) );
+ if ( rLocale.Language.getLength() )
+ aSubdirs.push_front( rLocale.Language );
+ if ( rLocale.Country.getLength() )
+ {
+ OUString aLocaleCountry = rLocale.Language
+ + OUString::createFromAscii( "-" )
+ + rLocale.Country;
+ aSubdirs.push_front( aLocaleCountry );
+ if ( rLocale.Variant.getLength() )
+ aSubdirs.push_front( aLocaleCountry
+ + OUString::createFromAscii( "." )
+ + rLocale.Variant );
+ }
+ return aSubdirs;
+}
+
+static bool
+fileExists( String const& aFile )
+{
+ String aUrl;
+ LocalFileHelper::ConvertPhysicalNameToURL( aFile, aUrl );
+ return UCBContentHelper::Exists( aUrl );
+}
+
+static OUString
+getFirstExisting( OUString const& aDir, std::list<OUString> const& aSubDirs,
+ OUString const& aXMLName )
+{
+ static OUString const aSlash = OUString::createFromAscii( "/" );
+ String aResult;
+ for ( std::list<OUString>::const_iterator i = aSubDirs.begin();
+ i != aSubDirs.end(); i++ )
+ {
+ String aFile = aDir + aSlash + *i + aSlash + aXMLName;
+ OSL_TRACE( "testing: %s", OUSTRING_CSTR( aFile ) );
+ if ( fileExists( aFile ) )
+ return aFile;
+ }
+ return OUString();
+}
+
+/* FIXME: IWBN to share code with impimagetree.cxx, also for reading
+ from zip files. */
+OUString
+readRightTranslation( OUString const& aXMLName )
+{
+ String aXMLFile;
+ std::list<OUString> aSubdirs
+ = getLocaleSubdirList( Application::GetSettings().GetUILocale() );
+#if TEST_LAYOUT // read from cwd first
+ OUString aCurrentWorkingUrl;
+ tools::getProcessWorkingDir( &aCurrentWorkingUrl );
+ String aCurrentWorkingDir;
+ LocalFileHelper::ConvertURLToPhysicalName( aCurrentWorkingUrl, aCurrentWorkingDir );
+ aXMLFile = getFirstExisting( aCurrentWorkingDir, aSubdirs, aXMLName );
+ if ( aXMLFile.Len() )
+ ;
+ else
+#endif /* TEST_LAYOUT */
+ {
+ OUString aShareUrl;
+ Bootstrap::locateSharedData( aShareUrl );
+ OUString aXMLUrl = aShareUrl + OUString::createFromAscii( "/layout" );
+ String aXMLDir;
+ LocalFileHelper::ConvertURLToPhysicalName( aXMLUrl, aXMLDir );
+ aXMLFile = getFirstExisting( aXMLDir, aSubdirs, aXMLName );
+ }
+
+ OSL_TRACE( "FOUND:%s", OUSTRING_CSTR ( OUString (aXMLFile) ) );
+ return aXMLFile;
+}
+
+} // namespace layoutimpl