2016-11-08 52 views
0

我想完整地读取位于src - > main - > res - > values下的string.xml文件。如何读取位于值文件夹中的文件

为了论证的缘故,我需要特定的文件来处理可能在我的应用程序中出现的一些本地化问题:说选定的设备语言是法语的,但仍然需要一些主英文字符串.xml文件仅适用于特定场景。因此,values/strings.xml中的所有资源都应存在于values-fr/strings.xml中,并将它们从值中移除-rr 不是选项

  • 显然,那种 getString(R.string.text_name)的解决方案是不能接受的,因为我们会从values-fr/strings.xml文件从values/strings.xml收到的text_name的价值,而不是。
  • 这不会有所帮助:

    getResources().getIdentifier("text_name", "string", getPackageName()); 
    
  • 这不会有所帮助,因为string.xml不是原始资产。 context.getResources().openRawResource(R.raw.test) context.getAssets().open("values/string.xml");

这是我尝试过,但没有给我,我要找的文件:使用特定

Uri.parse("android.resource://" + context.getPackageName() + resource_id_for_string_file); 
    1. 使用URI文件路径,如:

      File file = new File("/src/res/values/strings.xml"); 
      File file = new File("/res/values/strings.xml"); 
      
    2. 使用this postclass.getClass().getResourceAsStream(...))哪些也没有工作。

    老实说,虽然它会很容易,但我找不到任何地方解决这个问题。

  • +0

    你仍可以添加英文值对于法国文件中的某些键? – Yazan

    +0

    您的方法不正确。如果你想从'values/strings.xml'的'values-fr/strings.xml'和其他值中读取一些值,那么就不要在values/strings中添加你需要的值。 xml“转换为'values-fr/strings.xml'。如果没有特定语言环境的值,则将使用默认语言环境。 –

    +0

    谢谢,但它并没有帮助我,因为我需要fr-fr字符串中的所有资源(我希望特定的场景不要访问该文件并转到values/strings.xml文件) – Dus

    回答

    1

    如果你想要一些英文语言的文本,那么我建议你仅仅在法文string.xml文件中提到英文文本。只会从法文string.xml文件中自动采用英文。你不必明确地阅读它。否则,请勿在您的法语文件string.xml中添加该值。它会直接从主文件string.xml中引用它。

    +1

    多数民众赞成在这种情况下,我希望能够控制它在几种情况下,而不是所有,所以我不能做你的建议。 – Dus

    0

    如果你必须这样做,那么编写一个方法,设置当前语言环境为US时应用程序的语言环境为(FR),然后调用将从相关文件获取值的getString(),然后恢复为最初选定的区域设置这种方式(设置临时区域前)你继续使用相同的API方法没有曲折

    public String getString(int id, Locale fromLocale, Context ctx){ 
        final Locale oldDefaultLocale = Locale.getDefault(); 
    
        Locale.setDefault(fromLocale); 
        Configuration config = getBaseContext().getResources().getConfiguration(); 
        final Locale oldConfigLocale = config.locale; 
        config.locale = fromLocale; 
        ctx.getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics()); 
        final String result = ctx.getString(id); 
    
        Locale.setDefault(oldDefaultLocale); 
        config.locale = oldConfigLocale; 
        ctx.getResources().updateConfiguration(config, 
          getBaseContext().getResources().getDisplayMetrics()); 
    
        return result; 
    } 
    

    语言环境改变/方法执行 也不会影响其他视图/资源时立即恢复...在屏幕上

    ,如果你把这个在一个父活动/片段,你不必通过Context ctx但如果一个实用程序类什么的,你需要通过它

    相关问题