dosubot[bot] commented on issue #29613:
URL: https://github.com/apache/superset/issues/29613#issuecomment-2232954723
<!-- Greeting -->
@praveer38 Hello there! I'm here to help you with any bugs, questions, or
contributions you have for the repository. Let me know how I can assist you!
<!-- Answer -->
To resolve the `ModuleNotFoundError: No module named
'superset.translations.utils'` error, ensure that the `superset/translations`
directory is correctly created and populated. Here are the steps to follow:
1. **Ensure the `babel-compile` Command Runs Successfully**:
Make sure the following command in your Dockerfile runs without errors:
```dockerfile
RUN flask fab babel-compile --target superset/translations
```
2. **Check the `PYTHONPATH` Environment Variable**:
Ensure the `PYTHONPATH` includes the path to the `superset` directory:
```dockerfile
ENV PYTHONPATH=/home/superset/superset/:$PYTHONPATH
```
3. **Copy and Compile Translations**:
Ensure your Dockerfile includes the steps to copy and compile
translations:
```dockerfile
# This copies the .po files needed for translation
RUN mkdir -p /app/superset/translations
COPY superset/translations /app/superset/translations
# Compiles .json files from the .po files, then deletes the .po files
RUN npm run build-translation
RUN rm /app/superset/translations/*/LC_MESSAGES/*.po
RUN rm /app/superset/translations/messages.pot
# Copy the .json translations from the frontend layer
COPY --chown=superset:superset --from=superset-node
/app/superset/translations superset/translations
# Compile translations for the backend - this generates .mo files, then
deletes the .po files
COPY ./scripts/translations/generate_mo_files.sh ./scripts/translations/
RUN ./scripts/translations/generate_mo_files.sh \
&& chown -R superset:superset superset/translations \
&& rm superset/translations/messages.pot \
&& rm superset/translations/*/LC_MESSAGES/*.po
```
4. **Verify the `utils.py` File**:
Ensure the `superset/translations/utils.py` file exists and is correctly
referenced. Here is a snippet of what the `utils.py` file might look like:
```python
import json
import logging
import os
from typing import Any, Optional
logger = logging.getLogger(__name__)
# Global caching for JSON language packs
ALL_LANGUAGE_PACKS: dict[str, dict[str, Any]] = {"en": {}}
DIR = os.path.dirname(os.path.abspath(__file__))
def get_language_pack(locale: str) -> Optional[dict[str, Any]]:
"""Get/cache a language pack
Returns the language pack from cache if it exists, caches otherwise
>>> get_language_pack('fr')['Dashboards']
"Tableaux de bords"
"""
pack = ALL_LANGUAGE_PACKS.get(locale)
if not pack:
filename = DIR + f"/{locale}/LC_MESSAGES/messages.json"
if not locale or locale == "en":
# Forcing a dummy, quasy-empty language pack for English
since the file
# in the en directory is contains data with empty mappings
filename = DIR + "/empty_language_pack.json"
try:
with open(filename, encoding="utf8") as f:
pack = json.load(f)
ALL_LANGUAGE_PACKS[locale] = pack or {}
except Exception: # pylint: disable=broad-except
logger.error(
"Error loading language pack for, falling back on en %s",
locale
)
pack = get_language_pack("en")
return pack
```
5. **Check for Recent Documentation Updates**:
Starting with version 4.0.0, translations are now bundled inside the
Python package. Ensure you are following the updated guidelines:
```md
- [28483](https://github.com/apache/superset/pull/28483) Starting with
this version we bundle
translations inside the python package. This includes the .mo files
needed by pybabel on the
backend, as well as the .json files used by the frontend. If you were
doing anything before
as part of your bundling to expose translation packages, it's probably
not needed anymore.
```
By following these steps, you should be able to resolve the
`ModuleNotFoundError` related to `superset.translations.utils`
<sup>[[1]](https://github.com/apache/superset/blob/master/RELEASING/Dockerfile.from_svn_tarball)</sup><sup>[[2]](https://github.com/apache/superset/blob/master/RELEASING/Dockerfile.from_local_tarball)</sup><sup>[[3]](https://github.com/apache/superset/blob/master/Dockerfile)</sup><sup>[[4]](https://github.com/apache/superset/blob/master/superset/translations/utils.py)</sup><sup>[[5]](https://github.com/apache/superset/blob/master/UPDATING.md)</sup>.
<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]