質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

1590閲覧

言語ファイル内に定義されていないキーの検索

fearless0603

総合スコア41

Cygwin

Cygwinは、Unixのような環境を、Windows上で構築させるコマンドラインインターフェースです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/09/02 02:09

編集2016/09/02 02:45

ファイルAと言語ファイルが存在します。

ファイルAの中には

trans(''); trans('配達先編集'); trans('マイページトップ'); trans('電話番号'); ・・・・ trans('プロジェクト名');

など関数とその中にキーが引数として設定されています。

言語ファイル内(messages.php)には

<?php return [ '配達先編集' => 'バリュー1', 'マイページトップ' => 'バリュー2', '電話番号' => 'バリュー3', '住所1' => 'バリュー4', ];

このようなキーと値の配列を格納しています。

言語ファイルで定義されていないキーを指定している処理(ここでは'プロジェクト名')が存在しているのですが、このような定義されていないキー文字列を検索する方法を教えていただきたいです。

テキストエディタのatomでの検索方法でも、cygwinでも、unixコマンドでも、調べるにあたってのキーワードでもいいので、ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ファイルAはPHPファイルでしょうか?

であれば、関数transを以下のように書き換え、ファイルAを(PHPコマンドで)実行すれば分かります。

php

1function trans($key) { 2 $messages = require('messages.php'); 3 4 if (!array_key_exists($key, $messages)) { 5 echo $key . "\n"; 6 } 7}

require('messages.php')のパスは、 messages.php ファイルが配置されている場所に合わせて適切に書き換えてください。

投稿2016/09/02 05:50

KiyoshiMotoki

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下でいかがですか?

file_a.txt

trans(''); trans('配達先編集'); trans('マイページトップ'); trans('電話番号'); trans('プロジェクト名');

test.sh

#!/bin/sh file_a='file_a.txt'; target='messages.php'; cat ${file_a} | sed -e "s/trans('\(.*\)');/\1/" | while read line do if [ "${line}" != "" ]; then grep "${line}" $target > /dev/null 2> /dev/null if [ $? -eq 1 ]; then echo "${line}" fi fi done

実行

$ sh test.sh プロジェクト名

投稿2016/09/02 03:13

編集2016/09/02 05:57
moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

array_key_exists を使えば、言語ファイルにあってPHPファイルにていひされていないものは検索できるのでは?


definitions.txt

txt

1trans(''); 2trans('配達先編集'); 3trans('マイページトップ'); 4trans('電話番号'); 5trans('プロジェクト名');

messages.php

php

1<?php 2 3/** 4 * messages.php 5 */ 6$arr = [ 7 '配達先編集' => 'バリュー1', 8 'マイページトップ' => 'バリュー2', 9 '電話番号' => 'バリュー3', 10 '住所1' => 'バリュー4' 11];

test.php

php

1require 'messages.php'; 2 3$difinitions = file_get_contents('definitions.txt'); 4$funcs = explode(PHP_EOL, $difinitions); 5 6foreach ($funcs as $func) { 7 if (preg_match("/trans\('(.*)'\);/", $func, $match)) { 8 $key = $match[1]; 9 if (!array_key_exists($key, $arr)) { 10 var_dump(sprintf("\"{$key}\" が設定されていません。")); 11 } 12 } 13}

投稿2016/09/02 02:14

編集2016/09/02 06:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fearless0603

2016/09/02 02:25

array_key_exists()だと返り値がbooleanで、パラメータにいちいち値を入力しなくてはならないと思うのですが・・・
退会済みユーザー

退会済みユーザー

2016/09/02 02:26

ループで回せばすみません?
fearless0603

2016/09/02 02:36

ここでは簡略化してkeyを'key001'などの名称にしたのですが、実際には'配達先編集'"戻る""対象プロジェクト"など、keyの名称がバラバラなのですが、ループできるものなのでしょうか?
退会済みユーザー

退会済みユーザー

2016/09/02 02:45 編集

提示された情報と、実際のものに相違があるなら、それはそれとして、回答に必要な情報を提示いただかないと回答のしようがありません。 php ファイルのファイル名や、return が入っていることを見るとなんらかの関数か、クラスのメソッドなのだろうとは想像できますが、それ以上の情報もありませんし、言語ファイルのファイル名も不明…。 > ループできるものなのでしょうか? 配列に突っ込めば難しいことではないでしょう。
退会済みユーザー

退会済みユーザー

2016/09/02 02:59

messages.php の関数名を明記してください。
fearless0603

2016/09/02 05:33

messages.php内部には、関数名はなく、いきなりreturnから始まっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問