2014-06-09 29 views
6

Khi sử dụng localizable.strings với nhiều mục nhập trong dự án XCode của bạn, bạn sớm hay muộn có thể sử dụng khóa nhiều lần. Có thể để XCode tìm thấy trường hợp đó và đưa ra cảnh báo về nó không?Làm thế nào để tìm các khóa trùng lặp trong các tệp localizable.strings tự động?

Apple Resource Programming đề cập đến công cụ genstrings, nhưng thông thường bạn không tự mình sử dụng trong XCode. Vì vậy, làm thế nào tôi có thể cho XCode phát hiện các khóa trùng lặp trong các tập tin như vậy mà không cần chạy genstrings bằng tay?

Bounty lưu ý: để kiếm được tiền thưởng là một giải pháp phải tích hợp đầy đủ với XCode nếu nó sử dụng nguồn lực bên ngoài như kịch bản, có nghĩa là, nó phải làm việc với các tập tin đầu vào được đưa ra trong XCode, đánh dấu một xây dựng như thất bại trong trường hợp bản sao và không được kích hoạt cho các kết quả dương tính giả như dòng hoặc nhận xét trống.

+2

Tôi không tin Xcode có thể làm điều đó, vì vậy bạn có thể cần phải viết một kịch bản bằng Python hoặc somesuch và gọi nó là một phần của bản dựng. – trojanfoe

Trả lời

13

cut -d' ' -f1 Localizable.strings | sort | uniq -c

loại lệnh này tại nhà ga và bạn nhận được một danh sách nói mỗi phím được sử dụng thường xuyên.

sử dụng -d thay vì -c và bạn chỉ nhận được bản sao

kịch bản:

#!/bin/bash 

c=`expr $SCRIPT_INPUT_FILE_COUNT - 1` 
for i in $(seq 0 $c) 
    do 

    var="SCRIPT_INPUT_FILE_$i" 
    FILENAME=${!var} 

    DUPES=`cut -d' ' -f1 "$FILENAME" | sort | uniq -d` 

    while read -r line; do 
     if [[ $line == "\""* ]] ; 
     then 
      echo "warning: $line used multiple times -" 
     fi 
    done <<< "$DUPES" 
done 

screenshot

+0

điều này có thể được sử dụng trong quá trình xây dựng - chỉ cần sửa đổi tên tệp để trỏ vào đúng vị trí –

+0

trong quá trình xây dựng, ví dụ: một cái gì đó như "$ {PROJECT_DIR} /app/en.lproj/Localizable.strings" –

+0

Điều này khá thú vị. Bạn có thể sửa đổi kịch bản để nó sử dụng các tập tin đầu vào được đưa ra cho giai đoạn xây dựng kịch bản và chỉ hoạt động trên các mục nhập thực sự của biểu mẫu 'key =" văn bản ";'? Bằng cách đó, nó bỏ qua các dòng trống, nhận xét và các nội dung tương tự. –

-1
more Filename.strings | tr -d ' ' | sort | uniq -d | grep -v '^$' 
+0

Điều này chỉ quét các dòng trùng lặp, không phải các khóa trùng lặp – basvk

0

cắt -d '=' -f1 Localizable. chuỗi | sắp xếp | uniq -d

Bạn tìm cụm từ được phân tách bằng dấu bằng, không phải từ đầu tiên trong mỗi chuỗi.

Các vấn đề liên quan