Skip to content

Instantly share code, notes, and snippets.

@omamkaz
Last active October 18, 2024 01:00
Show Gist options
  • Save omamkaz/2bba2742dc053559469096b8ade748b3 to your computer and use it in GitHub Desktop.
Save omamkaz/2bba2742dc053559469096b8ade748b3 to your computer and use it in GitHub Desktop.
simple python code to convert between arabic and english numbers
ar_numbers = "٠١٢٣٤٥٦٧٨٩"
en_numbers = "0123456789"
ar_number = "١٤٢٣٤٠٣٧osama"
en_number = "14234037osama"
def convert_numbers(text: str, to_language: str = "en") -> str:
def _convertor(text: str, from_language: str, to_language: str) -> str:
return "".join([to_language[from_language.index(n)] if n in from_language else n for n in text])
if to_language == "en":
return _convertor(text, ar_numbers, en_numbers)
elif to_language == "ar":
return _convertor(text, en_numbers, ar_numbers)
else:
raise ValueError("Invalid language")
print(convert_numbers(en_number, "ar"))
print(convert_numbers(ar_number, "en"))
## Using Enum
from enum import StrEnum
class Language(StrEnum):
arabic = ar = "٠١٢٣٤٥٦٧٨٩"
english = en = "0123456789"
def convert_numbers(text: str, from_language: Language, to_language: Language) -> str:
return "".join(
map(
lambda n: to_language[from_language.value.index(n)] if n in from_language.value else n,
text
)
)
print(convert_numbers(en_number, Language.en, Language.ar))
print(convert_numbers(ar_number, Language.ar, Language.en))
## Using Built-in str method
def convert_numbers(text: str, to_language: str = "en") -> str:
# Create translation tables for faster conversion
ar_to_en = str.maketrans(ar_numbers, en_numbers)
en_to_ar = str.maketrans(en_numbers, ar_numbers)
if to_language not in ("en", "ar"):
raise ValueError("Invalid language")
return text.translate(ar_to_en if to_language == "en" else en_to_ar)
print(convert_numbers(en_number, "ar"))
print(convert_numbers(ar_number, "en"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment