Technical Articles
Runtime language translation using Google Translation API: Building an simple RFC to retrieve the translation at runtime
Business Scenario:
Scenario: There are many times when we need to translate some text from one language to another based on business demands during the runtime and display it over the UI.
For this, I came up with a Runtime Language Solution using existing API resources. I have developed 2 solutions as below
- Using Google Translate API for which Google API Licence is pre-requisite and cost more if customer doesn’t alright have it.
- Using SAP Translation Hub API for which SAP Translation Hub Licence is required and API Key is included with S/4HANA licence.
I will write 2 blogs separately for both the solutions. In this blog, I will explain the first option using Google Translation API step by step.
Step 1: Set Up Your Google Cloud Project and Obtain API Key
The first step in integrating the Google Translation API is to set up a Google Cloud Project. This can be done by visiting the Google Cloud Console and creating a new project. After setting up the project, you will need to obtain an API key, which can be done by navigating to the “Credentials” section of the Google Cloud Console.
- Visit the Google Cloud Console at https://console.cloud.google.com/
- Click on the project drop-down and select or create the project that you want to use for this integration.
- Click on the hamburger menu and select APIs & Services > Library.
- Search for Google Cloud Translation API and click on the API to open its overview page.
- Click on the Enable button to enable the API for your project.
- Go to the API credentials page.
- Click on the Create credentials button and select API key.
- The API key will be displayed on the API credentials page. Note down this API key as it will be used in the SAP ABAP code.
Step 2: Create a New SAP ABAP Project
The next step is to create a new SAP ABAP project. This can be done by navigating to the SAP ABAP development environment and creating a new project.
- Log in to your SAP system with a user that has sufficient authorisation to create ABAP programs.
- Navigate to the ABAP Development workbench (transaction SE80).
- In the ABAP workbench, click on the Create button and select Package.
- Enter a descriptive name for the package and click on the Create button.
- Right-click on the package and select Create > Function Group.
- Enter a descriptive name for the function group and click on the Create button.
- Right-click on the function group and select Create > Function Module.
Step 3: Define the Function Module
Once you have created your SAP ABAP project, you need to define the function module. To do this, navigate to the ABAP Dictionary and create a new function module. In the function module, you will need to specify the parameters and the return values.
- Enter a descriptive name for the function module.
- In the Function module dialog, click on the Import tab.
- Define the input parameters for the function module. For example:
- IMPORTING
- IV_TEXT TYPE STRING,
- IV_SOURCE_LANGUAGE TYPE STRING,
- IV_TARGET_LANGUAGE TYPE STRING.
- IMPORTING
- In the Function module dialog, click on the Export tab.
- Define the output parameters for the function module. For example:
- EXPORTING
- EV_TRANSLATED_TEXT TYPE STRING.
- EXPORTING
- Save the function module.
Step 4: Write the Code for the Function Module
The next step is to write the code for the function module. The code will utilise the Google Translation API to translate the text from one language to another. To do this, you will need to make an HTTP request to the Google Translation API and pass in the text to be translated, along with the source and target languages.
Please look for the FM code into the Appendix 1 at the end of the blog.
Step 5: Test the Function Module
Once you have written the code for the function module, you can test it to ensure it works as expected. To do this, you can run the function module in the SAP ABAP development environment and verify that it returns the expected results.
- Save and activate the function module.
- In the ABAP workbench, click on the Test button to open the Function Builder.
- Enter test input values for the function module and click on the Test button.
- Check the test output values to ensure that the integration is working as expected.
And that’s it! You have successfully integrated the Google Translation API into your SAP ABAP system.
In conclusion, integrating the Google Translation API into SAP ABAP is a simple and straightforward process. With just a few steps, you can add a new level of functionality to your SAP ABAP applications, making it easier for businesses with a global presence to communicate with their customers in multiple languages.
Appendix 1:
****************************************************************************************************
Appendix 1: Sample code:
****************************************************************************************************
* Define the data for the API request
data: lv_url type string value 'https://translation.googleapis.com/language/translate/v2',
lv_key type string value 'YOUR_API_KEY',
lv_q type string value iv_text,
lv_source type string value iv_source_language,
lv_target type string value iv_target_language,
lv_param type string,
lv_response type string.
* Build the API request URL
concatenate lv_url '?q=' lv_q '&source=' lv_source '&target=' lv_target '&key=' lv_key into lv_param.
* Call the API and receive the response
call method cl_http_client=>create_by_url
exporting
url = lv_param
importing
client = lv_client
exceptions
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
others = 4.
call method lv_client->request->set_method
exporting
method = 'GET'.
call method lv_client->send
exceptions
http_communication_failure = 1
http_invalid_state = 2.
call method lv_client->receive
exceptions
http_communication_failure = 1
http_invalid_state = 2.
lv_response = lv_client->response->get_cdata( ).
* Extract the translated text from the response
data(lv_json) = cl_sxml_string_reader=>from_string( lv_response ).
data(lv_data) = cl_sxml_table_reader=>from_json( lv_json ).
ev_translated_text = lv_data[ 'data' ]-['translations' ]-0-['translatedText' ].
* Close the HTTP client connection
call method lv_client->close.
Please note that you will need to replace YOUR_API_KEY
, YOUR_TEXT_TO_BE_TRANSLATED
, YOUR_SOURCE_LANGUAGE
, and YOUR_TARGET_LANGUAGE
with your own values. You may also need to modify the code to parse the response according to your specific needs.
Please share your feedback or comments down below if you have any suggestions.
In the next blog, I will be sharing the second solution i.e. Runtime Translation Solution using SAP Translation Hub API, which will be live soon.
Thank you and keep learning!
Hi Shashank Kasar,
Very interesting. Translation indeed is a challange and you have some approach. Good.
Have you considered utilizing SAP BRF+ as a place to actually perform the translation using the un-translated data from SAP S4Hana?
Just curious
regards
Nagaraj
Hi Nagaraj,
Thank you going through the blog.
Yes, indeed we considered that option. But our requirement was different and utilising brfplus for that was not feasible. So, we had not decided to go with it.
One of the many requirements we had was that, in MDG UI for Material master, we wanted to display the Material description at the local language at the MDG UI based on the plant location, only when the business users navigate inside the Plant UI. For that, E.g. a single material had 50-60 plants sometimes and it would be troublesome to involve brfplus rules to do the translations. By using the FM call, we could just translate it at the runtime from the MDG derivation badi.
Few advantages - We don't have to storage the translated data obviously, don't have to build the brfplus rules and it's call. Moreover this FM can be used across the MDG out-of-the-box domains (FI, MM, BP) and even could be utilised out of the MDG framework itself.
Would be great to hear with some more suggestions. Thank you for taking out time to comment!
Great post! I'd appreciate your help to solve this issue: https://stackoverflow.com/questions/76123998/google-api-translate-stops-after-6-hours-running-in-a-google-vm