/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #include "translate.hxx" #include #if TEST_LAYOUT #include #include "tools/getprocessworkingdir.hxx" #endif #include #include #include #include #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 getLocaleSubdirList( lang::Locale const& rLocale ) { std::list 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 const& aSubDirs, OUString const& aXMLName ) { static OUString const aSlash = OUString::createFromAscii( "/" ); String aResult; for ( std::list::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 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