2012-07-19 19 views
6

Poszukuję sposobu, aby PoEdit zrozumiał adnotacje PHP. Oto przykładowy kod Chcę poedit podnieść i umieścić w katalogu:Adnotacje PoEdit i PHP

class MyController extends Controller { 

    /** 
    * @Title "Home" 
    */ 
    public function index() { 
     ... 
    } 

} 

Interesującą częścią jest @Title adnotacji. Jest dostępny w kontrolerze głównym i przypisany do widoku głównego, skutecznie kończąc w tagu <title>...</title>.

Teraz potrzebuję tego tłumaczenia, ale PoEdit wydaje się rozumieć tylko wyrażenia _(), a dodanie słowa @Title do słów kluczowych nie działa. Jest tak prawdopodobnie dlatego, że adnotacje w PHP są w bloku komentarza.

Czy istnieje sposób zmuszenia PoEdit do zrozumienia adnotacji?

+4

lubię wykorzystania uwag faktycznie zrobić rzeczy w dokumencie. Komentarze powinny być zarezerwowane dla tekstu czytelnego dla człowieka, aby zrozumieć kod i być może pomóc IDE w wyborze typów zmiennych. Nie powinien on serwerować żadnej funkcji w aplikacji. –

+0

Jest to jedyny sposób tworzenia adnotacji w PHP i jest faktycznie wspierany przez podsystem refleksyjny w języku. Zobacz metodę getDocComment() na różnych klasach Reflection. Co więcej, są one czytelne dla ludzi - alternatywą dla powyższego przykładu byłoby coś takiego jak PageView :: getInstance() -> setTitle ("Home") w kodzie akcji. –

+0

Zgadzam się z @Truth tam, używając adnotacji do robienia rzeczy jest jak zapisywanie zmiennych jako nazwy plików pustych plików; możesz to zrobić, ale to po prostu niezręczne. Poza tym uzyskanie dostępu do pliku jako tekstu tylko po to, by odczytać wartość, wydaje się być marnotrawstwem, gdy można, jak wiadomo, ustawić zwykłą zmienną, np. Publiczną właściwość klasy, z dowolną wartością. – Mahn

Odpowiedz

0

Jeśli naprawdę chcesz to zrobić w ten sposób, to możesz po prostu wyodrębnić ciągi musisz z plików php do pliku zewnętrznego, zastępując część adnotacji z _ (string); dla każdego meczu i uruchom Poedit na tym pliku.

można dopasować go .*\*\s\@(\w+)\s\"(\w+)\".* - $1 w meczu będzie adnotacja (tytuł), $2 będzie wartość: (Home)

3

Krótka odpowiedź, nie można.

poedit wykorzystuje xgettext skanowanie plików zatem stosując specyficzną składnię, ignorując komentowane linie.

Na przykład, jeśli słowa kluczowe są _ poniższe przykłady będą analizowane jak:

_('test'); -> ciąg 'test'

_("test"); -> ciąg 'test'

_('test' -> ciąg 'test'

_ 'test -> no catch

_('test -> bez połowu

_(test) -> no catch

_($test) -> no catch

//_('test'); -> no catch

/*_('test');*/ -> no catch

Można wykonać xgettext używając innych parametrów, ale nie jestem pewien, czy będziesz w stanie osiągnąć swój cel.


Jeden łatwo naprawić (nie standardowe ofc) jest dodanie innych słów kluczowych jak placeholder i utworzyć funkcję php jak

function placeholder($string){} 

i używać go tak poedit można analizować to

class MyController extends Controller { 

    /** 
    * @Title "Home" 
    */ 
    public function index() { 
     placeholder('Home'); 
     ... 
    } 

} 

W twoim parserze frontendu używaj prostego _($value), a ty będziesz mieć przetłumaczony tytuł.

Nie wiem jak jest twój kod, ale przyjmiesz coś podobnego do tego.

Zakładając, że $ tag = 'Tytuł' i $ value = 'Home'

echo '<'.$tag.'>'._($value).'</'.$tag.'>';