Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Android, is there a reason to use string resources for strings that are not going to be translated?

I'm wondering what the drawbacks are for using strings that are defined in the java files in Android code.

I like to use plain old Java strings for things that are not visible strings like e.g. names in XML documents that I'm parsing, or keys for bundles. Seems to be a good idea to just keep all those things in the java file where they are used instead of moving them out into an XML file and making the code more complicated.

Yet, I see many examples of Android code that seem to put every string into a resource file.

What's the issue with having strings in java files? What are the reasons that people don't do it? I've been doing it in my apps and haven't seen any issues yet so far.

Note that I'm aware that XML files make a ton of sense for stuff that needs to be translated. This question is for cases where the strings stay the same.

Let me try to make this question clearer:

Are there any reasons except:

  • Because it's a standard / best practise etc. - my question is basically: why is it a best practise, only because of i8n, or are there other reasons?
  • Because it allows you to use the resources framework for translation, device-dependent strings etc.
  • Because it allows you to use non-ASCII characters.
like image 348
treesAreEverywhere Avatar asked Sep 15 '15 13:09

treesAreEverywhere


3 Answers

The simple answer to your question is its a standard to put all your string into resource. Also there are many reason that if you are keeping your string in xml/java file you have to update each and every reference in these file for a single string.

for eg. if You want to change "Ok" to "confirm" which are used in 5 different file you have to change in all those 5 files but for String resource you just have to update one file which string.xml.

Edit

Please find below some of reasons we should use String.xml

1) To update single reference to multiple occurrences. As according to the @treesAreEverywhere It can be done with public static String, but it will take memory on startup of application and till application is closed. But String written in String.xml will be loaded at time of use.

2) Multiple language support. You can create multiple language resource folder to support your multiple language application so language changed using Locale will be dynamically maintained by OS at run time according to language resource folder.

3) Please check Localization document which provide you more information about using string.xml

4) Strings don’t clutter up your application code, leaving it clear and easy to maintain.

It's a kind of coding standard like any other language has. But you can ignore it if you want and can create your code with public static string variable in code. It is not compulsory to use string.xml but its a good coding practice to use it. Good practice like closing the if block with parenthesis containing single statement rather than leaving it as it is.

if(condition){ statement; } rather than if(condition) statement;

like image 105
Abhinav Singh Maurya Avatar answered Oct 16 '22 23:10

Abhinav Singh Maurya


Actually, good practices is a good reason to do it, but there are more.

For example, one reason that I can recall right now is that strings.xml is UTF-8 codified. Hardcoded strings doesn't show some characters properly.

like image 27
Zinc Avatar answered Oct 17 '22 01:10

Zinc


The purpose of strings.xml (and other *.xml resource files) is to regroup similar values in one place. This facilitates finding values that would be otherwise buried in the code. Those resource files also makes the maintainability better, since a modification to one value can have app-wide effects (such as changing the title of the app or the theme). Finally, as you mentioned, it provides a framework for translating your app to other languages.

If you know your app will not be translated and won't be modified, it's not a bad thing to hard-code them. However, if you think your app will get a lot of updates, it is better to start using good foundations and use XML resource files.

Besides these reasons and the ones mentioned by @Zinc (which I am unaware of and cannot confirm), there are no other reasons regarding why you would want to use XML resource files.

The drawback of using resource files is that is is theoretically is slower and requires a bit more memory. Read android - strings.xml vs static constants and Does hard coding of string affect performance?

like image 21
GammaOmega Avatar answered Oct 16 '22 23:10

GammaOmega