old_contents: import re
  import sys
  
  errors_encounter = 0
  pattern = re.compile(r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,\s*(.)*?\s*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)")
  start_pattern = re.compile(r"_{1,2}\([\"'`]{1,3}.*?[a-zA-Z]")
  
  # _('this is valid')
  # _('{0} {1}')
  # _("{0} {1}")
  # _("{0} valid")
  # _("valid {0}")
  
  # skip first argument
  files = sys.argv[1:]
  files_to_scan = [_file for _file in files if _file.endswith(('.py', '.js'))]
  
  for _file in files_to_scan:
  	with open(_file, 'r') as f:
  		print(f'Checking: {_file}')
  		file_lines = f.readlines()
  		for line_number, line in enumerate(file_lines, 1):
  			start_matches = start_pattern.search(line)
  			if start_matches:
  				match = pattern.search(line)
  				if not match and line.endswith(',\n'):
  					# concat remaining text to validate multiline pattern
  					line = "".join(file_lines[line_number - 1:])
  					line = line[start_matches.start() + 1:]
  					match = pattern.match(line)
  
  				if not match:
  					errors_encounter += 1
  					print(f'\nTranslation syntax error at line number: {line_number + 1}\n{line.strip()[:100]}')
  
  if errors_encounter > 0:
  	print('\nYou can visit "https://frappeframework.com/docs/user/en/translations" to resolve this error.')
  	sys.exit(1)
  else:
  	print('\nGood To Go!')
  
new_contents: import re
  import sys
  
  errors_encounter = 0
  pattern = re.compile(r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,\s*(.)*?\s*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)")
  words_pattern = re.compile(r"_{1,2}\([\"'`]{1,3}.*?[a-zA-Z]")
  start_pattern = re.compile(r"_{1,2}\([f\"'`]{1,3}")
  f_string_pattern = re.compile(r"_\(f[\"']")
  starts_with_f_pattern = re.compile(r"_\(f")
  
  # _('this is valid')
  # _('{0} {1}')
  # _("{0} {1}")
  # _(f"invalid")
  # _(fieldname)
  # _("{0} valid")
  # _('asdf asdf')
  # _("valid {0}")
  
  # skip first argument
  files = sys.argv[1:]
  files_to_scan = [_file for _file in files if _file.endswith(('.py', '.js'))]
  
  files_to_scan = ['/Users/farisansari/Projects/benches/frappe-bench/apps/frappe/.github/helper/translation.py']
  
  for _file in files_to_scan:
  	with open(_file, 'r') as f:
  		print(f'Checking: {_file}')
  		file_lines = f.readlines()
  		for line_number, line in enumerate(file_lines, 1):
  			start_matches = start_pattern.search(line)
  			if start_matches and not '# frappe-lint: disable-translate' in line:
  				starts_with_f = starts_with_f_pattern.search(line)
  
  				if starts_with_f:
  					has_f_string = f_string_pattern.search(line)
  					if has_f_string:
  						errors_encounter += 1
  						print(f'\nF-strings are not supported for translations at line number {line_number + 1}\n{line.strip()[:100]}')
  						continue
  					else:
  						continue
  
  				match = pattern.search(line)
  				error_found = False
  
  				if not match and line.endswith(',\n'):
  					# concat remaining text to validate multiline pattern
  					line = "".join(file_lines[line_number - 1:])
  					line = line[start_matches.start() + 1:]
  					match = pattern.match(line)
  
  				if not match:
  					error_found = True
  					print(f'\nTranslation syntax error at line number {line_number + 1}\n{line.strip()[:100]}')
  
  				if not error_found and not words_pattern.search(line):
  					error_found = True
  					print(f'\nTranslation is useless because it has no words at line number {line_number + 1}\n{line.strip()[:100]}')
  
  				if error_found:
  					errors_encounter += 1
  
  if errors_encounter > 0:
  	print('\nVisit "https://frappeframework.com/docs/user/en/translations" to learn about valid translation strings.')
  	sys.exit(1)
  else:
  	print('\nGood To Go!')
  
subject: Handle f string and fix words check