package net.osmand.plus.helpers; import android.content.Context; import net.osmand.IndexConstants; import net.osmand.PlatformUtil; import net.osmand.map.OsmandRegions; import net.osmand.plus.R; import net.osmand.plus.download.DownloadResources; import org.apache.commons.logging.Log; import java.lang.reflect.Field; /** * Created by Barsik * on 07.07.2014. */ public class FileNameTranslationHelper { private static final Log LOG = PlatformUtil.getLog(FileNameTranslationHelper.class); public static final String WIKI_NAME = "_wiki"; public static final String HILL_SHADE = "Hillshade_"; public static final String SEA_DEPTH = "Depth_"; public static String getFileName(Context ctx, OsmandRegions regions, String fileName) { String basename = getBasename(fileName); if (basename.endsWith(WIKI_NAME)) { //wiki files return getWikiName(ctx, basename); } else if (fileName.endsWith("tts")) { //tts files return getVoiceName(ctx, fileName); } else if (fileName.endsWith(IndexConstants.FONT_INDEX_EXT)) { //otf files return getFontName(ctx, basename); } else if (fileName.startsWith(HILL_SHADE)){ return getHillShadeName(ctx, regions, basename); } else if (fileName.length() == 2) { //voice recorded files try { Field f = R.string.class.getField("lang_"+fileName); if (f != null) { Integer in = (Integer) f.get(null); return ctx.getString(in); } } catch (Exception e) { System.err.println(e.getMessage()); } } //if nothing else String lc = basename.toLowerCase(); String std = getStandardMapName(ctx, lc); if (std != null) { return std; } if (regions != null) { return regions.getLocaleName(basename, true); } return null; } public static String getHillShadeName(Context ctx, OsmandRegions regions, String basename) { String hillsh = ctx.getString(R.string.download_hillshade_maps) + " "; String locName = regions.getLocaleName(basename.trim(), true); return hillsh + locName; } public static String getWikiName(Context ctx, String basename){ String cutted = basename.substring(0, basename.indexOf("_wiki")); String wikiName = getStandardLangName(ctx, cutted); if (wikiName == null){ wikiName = cutted; } String wikiWord = ctx.getString(R.string.amenity_type_osmwiki); int index = wikiWord.indexOf("("); if (index >= 0) { //removing word in "()" from recourse file return wikiName + " " + wikiWord.substring(0, index).trim(); } return wikiName + " " + ctx.getString(R.string.amenity_type_osmwiki); } public static String getVoiceName(Context ctx, String fileName) { try { String nm = fileName.replace('-', '_').replace(' ', '_'); if (nm.endsWith("_tts") || nm.endsWith("-tts")) { nm = nm.substring(0, nm.length() - 4); } Field f = R.string.class.getField("lang_"+nm); if (f != null) { Integer in = (Integer) f.get(null); return ctx.getString(in); } } catch (Exception e) { System.err.println(e.getMessage()); } return fileName; } public static String getFontName(Context ctx, String basename) { return basename.replace('-', ' ').replace('_', ' '); } private static String getBasename(String fileName) { if (fileName.endsWith(IndexConstants.EXTRA_ZIP_EXT)) { return fileName.substring(0, fileName.length() - IndexConstants.EXTRA_ZIP_EXT.length()); } if (fileName.endsWith(IndexConstants.SQLITE_EXT)) { return fileName.substring(0, fileName.length() - IndexConstants.SQLITE_EXT.length()).replace('_', ' '); } int ls = fileName.lastIndexOf("-roads"); if (ls >= 0) { return fileName.substring(0, ls); } else { ls = fileName.indexOf("."); if (ls >= 0) { return fileName.substring(0, ls); } } return fileName; } private static String getStandardLangName(Context ctx, String filename) { if (filename.equalsIgnoreCase("Afrikaans") || filename.equalsIgnoreCase("Africaans")) { return ctx.getString(R.string.lang_af); } else if (filename.equalsIgnoreCase("Belarusian")) { return ctx.getString(R.string.lang_be); } else if (filename.equalsIgnoreCase("Bulgarian")) { return ctx.getString(R.string.lang_bg); } else if (filename.equalsIgnoreCase("Bosnian")) { return ctx.getString(R.string.lang_bs); } else if (filename.equalsIgnoreCase("Catalan")) { return ctx.getString(R.string.lang_ca); } else if (filename.equalsIgnoreCase("Czech")) { return ctx.getString(R.string.lang_cs); } else if (filename.equalsIgnoreCase("Welsh")) { return ctx.getString(R.string.lang_cy); } else if (filename.equalsIgnoreCase("Danish")) { return ctx.getString(R.string.lang_da); } else if (filename.equalsIgnoreCase("German")) { return ctx.getString(R.string.lang_de); } else if (filename.equalsIgnoreCase("Greek")) { return ctx.getString(R.string.lang_el); } else if (filename.equalsIgnoreCase("English")) { return ctx.getString(R.string.lang_en); } else if (filename.equalsIgnoreCase("Spanish")) { return ctx.getString(R.string.lang_es); } else if (filename.equalsIgnoreCase("Basque")) { return ctx.getString(R.string.lang_eu); } else if (filename.equalsIgnoreCase("Finnish")) { return ctx.getString(R.string.lang_fi); } else if (filename.equalsIgnoreCase("French")) { return ctx.getString(R.string.lang_fr); } else if (filename.equalsIgnoreCase("Hindi")) { return ctx.getString(R.string.lang_hi); } else if (filename.equalsIgnoreCase("Croatian")) { return ctx.getString(R.string.lang_hr); } else if (filename.equalsIgnoreCase("Hungarian")) { return ctx.getString(R.string.lang_hu); } else if (filename.equalsIgnoreCase("Armenian")) { return ctx.getString(R.string.lang_hy); } else if (filename.equalsIgnoreCase("Indonesian")) { return ctx.getString(R.string.lang_id); } else if (filename.equalsIgnoreCase("Italian")) { return ctx.getString(R.string.lang_it); } else if (filename.equalsIgnoreCase("Hebrew")) { return ctx.getString(R.string.lang_iw); } else if (filename.equalsIgnoreCase("Japanese")) { return ctx.getString(R.string.lang_ja); } else if (filename.equalsIgnoreCase("Georgian")) { return ctx.getString(R.string.lang_ka); } else if (filename.equalsIgnoreCase("Korean")) { return ctx.getString(R.string.lang_ko); } else if (filename.equalsIgnoreCase("Lithuanian")) { return ctx.getString(R.string.lang_lt); } else if (filename.equalsIgnoreCase("Latvian")) { return ctx.getString(R.string.lang_lv); } else if (filename.equalsIgnoreCase("Marathi")) { return ctx.getString(R.string.lang_mr); } else if (filename.equalsIgnoreCase("Dutch")) { return ctx.getString(R.string.lang_nl); } else if (filename.equalsIgnoreCase("Norwegian")) { return ctx.getString(R.string.lang_no); } else if (filename.equalsIgnoreCase("Polish")) { return ctx.getString(R.string.lang_pl); } else if (filename.equalsIgnoreCase("Portuguese")) { return ctx.getString(R.string.lang_pt); //} else if (filename.equalsIgnoreCase("Portuguese")) { // return ctx.getString(R.string.lang_pt_br); } else if (filename.equalsIgnoreCase("Romanian")) { return ctx.getString(R.string.lang_ro); } else if (filename.equalsIgnoreCase("Russian")) { return ctx.getString(R.string.lang_ru); } else if (filename.equalsIgnoreCase("Slovak")) { return ctx.getString(R.string.lang_sk); } else if (filename.equalsIgnoreCase("Slovenian")) { return ctx.getString(R.string.lang_sl); } else if (filename.equalsIgnoreCase("Swedish")) { return ctx.getString(R.string.lang_sv); } else if (filename.equalsIgnoreCase("Turkish")) { return ctx.getString(R.string.lang_tr); } else if (filename.equalsIgnoreCase("Ukrainian")) { return ctx.getString(R.string.lang_uk); } else if (filename.equalsIgnoreCase("Vietnamese")) { return ctx.getString(R.string.lang_vi); } else if (filename.equalsIgnoreCase("Chinese")) { return ctx.getString(R.string.lang_zh); } return null; } public static String getStandardMapName(Context ctx, String basename) { if (basename.equals("world-ski")) { return ctx.getString(R.string.index_item_world_ski); } else if (basename.equals("world_altitude_correction_ww15mgh")) { return ctx.getString(R.string.index_item_world_altitude_correction); } else if (basename.equals("world_basemap")) { return ctx.getString(R.string.index_item_world_basemap); } else if (basename.equals("world_bitcoin_payments")) { return ctx.getString(R.string.index_item_world_bitcoin_payments); } else if (basename.equals(DownloadResources.WORLD_SEAMARKS_KEY) || basename.equals(DownloadResources.WORLD_SEAMARKS_OLD_KEY)) { return ctx.getString(R.string.index_item_world_seamarks); } else if (basename.equals("depth_contours_osmand_ext")) { return ctx.getString(R.string.index_item_depth_contours_osmand_ext); } else if (basename.equals("depth_points_southern_hemisphere_osmand_ext")) { return ctx.getString(R.string.index_item_depth_points_southern_hemisphere); } else if (basename.equals("depth_points_northern_hemisphere_osmand_ext")) { return ctx.getString(R.string.index_item_depth_points_northern_hemisphere); } return null; } }