programing

POEdit 사용 - 특정 도메인의 문자열만 검색합니다.

telebox 2023. 4. 2. 10:18
반응형

POEdit 사용 - 특정 도메인의 문자열만 검색합니다.

번역하고 싶은 Word Press 테마를 작성했습니다.

내 주제 안에서 나는 몇 가지 번역문을 사용한다.woocommerce(즉,<?php _('Your cart', 'woocommerce'); ?>).

그 woocommerce 문자열은 이미 번역되어 있기 때문에 당연히 다시 번역하고 싶지 않습니다.그러나 poedit을 사용하여 테마를 스캔하면 당연히 모든 텍스트 도메인이 검색됩니다.

제 질문은 다음과 같습니다.

특정 텍스트 도메인 내에서 문자열만 선택하도록 POEdit에 지시하려면 어떻게 해야 합니까?

  • __('Something', 'my-text-domain')
  • _e('Something else', 'my-text-domain')

저는 다음과 같은 답을 찾았습니다.

하지만 그것은 나에게 효과가 없는 것 같다.추가했습니다.ri:1,3c하지만 아무것도 변하지 않고 어떻게 해야 할지 모르겠어요

내가 어떻게 했는지 봐:

poedit source 키워드

GNU gettext 툴이나 Poedit(사용) 모두 gettext의 특정 오남용을 지원하지 않습니다.

gettext에서 도메인은 프로그램, 라이브러리, 플러그인, 테마와 같은 대략적인 "소프트웨어 조각"입니다.따라서 일반적으로 단일 디렉토리 트리에 존재하며 그 안에 혼자 있습니다.또는 적어도 여러 개의 pieces=pieces가 있는 경우에는 추출을 제한할 수 있는 하위 디렉토리로 적절하게 구성되어 있습니다.

단일 파일 내에서 도메인을 혼합하여 일치시키는 것은 gettext를 사용하는 방법이 아닙니다.또, 예를 들면, 모든 woocommerce 텍스트를 에 랩 하는 등, 자신의 도우미 기능을 사용하는 것 외에, 그것을 처리하는 합리적인 솔루션은 없습니다.__wooPoedit 키워드 목록에 추가하지 마십시오.

가장 좋은 해결책은 gettext 또는 Poedit이 특정 도메인으로 번역을 제한할 수 있는 경우입니다.Vachlav가 지적했듯이, 이것은 가능하지 않다.

회피책으로는 my-text-domain을 후처리하는 경우가 있습니다.pot 또는 *.po 파일을 사용하여 woocommerce와 같은 다른 플러그인에서 실제로 가져온 문자열을 모두 삭제합니다.

#!/bin/bash

# DRY_RUN="echo"
DRY_RUN=""
MY_DOMAIN="my-text-domain"

for PO in *.po; do
  echo "Removing other domains from file: $PO"
  # OTHER_DOMAINS are all the domain that are not MY_DOMAIN
  OTHER_DOMAINS=`grep "# @ " $PO  | grep -v $MY_DOMAIN | sort | uniq | grep -o '\w*'`
  for OTHER_DOMAIN in $OTHER_DOMAINS; do
    echo "  Removing ${OTHER_DOMAIN}..."
    # Replace ever "foreign" strings with a linebreak
    # Begins with "# @ OTHER_DOMAIN" and ends with an empty line
    $DRY_RUN perl -0777 -i -pe "s/# @ ${OTHER_DOMAIN}\n.+?\n\n//smg" $PO
  done
done

언급URL : https://stackoverflow.com/questions/30422256/using-poedit-only-search-for-strings-in-specific-domain

반응형