WP has very good support for this.  You will be Internationalizing and then Localizing your theme.  Internationalization is often abbreviated as "i18n" because there are 18 letters between the 'i' and the 'n'.

The Codex provides a great reference on what needs to be done here:
https://codex.wordpress.org/I18n_for_WordPress_Developers

Much of the work involves wrapping strings with various "__()" functions, providing a way for WP to find the appropriate localized version of a string for each language translation available.