Layman: making your software work in different locales (languages/cultures/etc.)
More specifically, it's the notion of separating representation from meaning. Much like software UI design involves separating presentation from logic (ex: classic MVC design pattern), software localization involves good code design to make porting your application to new customers easy.
The most common target of localization is all purpose text. Instead of hard coding strings like "Open file" you would determine the current locale this software is operating in then determine the actual text to insert. An additional benefit is that the job of translation can given to language experts, not the programmers.
More subtle examples include semantic meaning of program images or metaphors. An example would be a picture of a furniture table as an icon for a data table in a spreadsheet app. This would be a poor choice of icon since it does not localize well since the play on words only works in some languages like American English. In German, the word for furniture table is different than the one for a data table so it would make no sense.
Another example would be left-to-right text vs right-to-left or top-to-bottom text layouts depending on the language. If the page direction is reversed, does your UI styling still make sense?
Other related concepts include branding/de-branding and accessibility. All require careful software design to ensure your program logic and presentation are not dependent on one another.